我有一个树视图,我想更改一列的文本颜色。
我怎么能这样做?
谢谢
(参考标准 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.
}
首先,您必须在模型中设置一列来描述每一行的颜色。然后,您使用gtk_tree_view_insert_column_with_attributes将foreground
属性设置为颜色列的位置。