Изменение цвета шрифта для столбца в TreeView GTK

У меня есть древовидная структура, и я хочу изменить цвет текста в одном столбце.

Как я мог это сделать??

Спасибо

2 ответа

(Ссылаясь на стандартные методы C, с Vala пока что мало что сделали)

Есть несколько способов добиться этого. Вы можете изменить настройки текстового cellrenderer (GtkCellRendererText), например:

g_object_set (your_text_cell_renderer, "foreground", 
              "red", "foreground-set", TRUE);

Другой способ - использовать разметку:

highlighted_txt = g_strconcat ("<span background='yellow' foreground='black'>", 
                               my_text, "</span>", NULL);
g_object_set (your_text_cell_renderer, "markup", highlighted_txt, NULL);

Чтобы изменить цвет шрифта каждого столбца индивидуально при определенных условиях, используются gtk_tree_view_insert_column_with_data_func или gtk_tree_view_column_set_cell_data_func, они описаны в онлайн-документации для GtkTreeView. Вы можете использовать различные средства визуализации текстовых ячеек для каждого столбца, чтобы сохранить настройки отдельно.

Это можно сделать так:

for (columns_cnt = 0; columns_cnt < NUMBER_OF_COLUMNS; columns_cnt++) {
  text_renderer = gtk_cell_renderer_text_new ();
  columns[columns_cnt] = gtk_tree_view_column_new_with_attributes
                         (column_header_txt[columns_cnt], text_renderer, 
                         "text", columns_cnt, NULL);
  gtk_tree_view_column_set_cell_data_func (columns[columns_cnt], text_renderer, 
                                           (GtkTreeCellDataFunc) 
                                           set_column_attributes, NULL, NULL);
}

...

static void set_column_attributes (GtkTreeViewColumn *cell_column, 
                                   GtkCellRenderer   *txt_renderer,
                                   GtkTreeModel      *cell_model, 
                                   GtkTreeIter       *cell_iter, 
                                   gpointer          pointer)
{
 // Use g_object_set or something else here.
}

Во-первых, вы должны настроить столбец в вашей модели, описывающий цвет для каждой строки. Затем вы используете gtk_tree_view_insert_column_with_attributes, чтобы установить foreground приписать положение цветового столбца.

Другие вопросы по тегам