0

我有一个树视图,我想更改一列的文本颜色。

我怎么能这样做?

谢谢

4

2 回答 2

2

(参考标准 C 方法,目前对 Vala 做的不多)

有几种方法可以实现这一点。您可以更改文本单元渲染器 (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.
}
于 2012-12-23T10:33:57.317 回答
1

首先,您必须在模型中设置一列来描述每一行的颜色。然后,您使用gtk_tree_view_insert_column_with_attributesforeground属性设置为颜色列的位置。

于 2012-12-22T23:12:35.833 回答