【问题标题】:GtkTreeView C change individual text color for a specific row or cell and not the whole columnGtkTreeView C更改特定行或单元格而不是整列的单个文本颜色
【发布时间】:2020-02-27 22:33:59
【问题描述】:

我绞尽脑汁想弄清楚如何在不改变整个列的颜色的情况下更改 GtkTreeView 单元格中的文本颜色。我想根据条件从默认颜色动态更改为绿色或红色。就像通过或失败测试,​​单个单元格文本颜色变为红色或绿色,例如在 C 编程中。

if(strstr(string,"PASS"))
{
    g_object_set(renderer_pass_fail,"foreground", "Green","foreground-set", TRUE,NULL);
}
else
{
    g_object_set(renderer_pass_fail,"foreground", "Red","foreground-set", TRUE,NULL);
}

【问题讨论】:

    标签: c cell gtk3 renderer


    【解决方案1】:

    你必须在模型中再添加一列并在其中存储颜色。

    
    enum
    {
        TEXT_COL,
        COLOR_COL,
        N_COLUMNS
    };
    
    /* TreeModel */
    store = gtk_list_store_new (N_COLUMNS,
                                G_TYPE_STRING,
                                GDK_TYPE_RGBA);
    
    /* Column */                            
    renderer = gtk_cell_renderer_text_new ();
    column = gtk_tree_view_column_new_with_attributes (_("Name"),
                                                       renderer,
                                                       "text",
                                                       TEXT_COL,
                                                       "foreground-rgba",
                                                       COLOR_COL,
                                                       NULL);
    
    /* Adding an element */
    gtk_list_store_append (store, &ls_iter);
    gtk_list_store_set (store, &ls_iter,
                        TEXT_COL, "hello",
                        COLOR_COL, gdk_rgba_copy (color),
                        -1);
    

    【讨论】:

    • 谢谢。我正在使用 glade,但它是否在视觉上显示了额外的列?我不希望该列出现在视图中。需要隐藏。
    • @blackedpi 除非您手动操作,否则不会。那个额外的列在 model 中。 renderer 从一列获取文本,从另一列获取颜色。
    • Alexander,当您提到模型时,它有助于区分列和模型。谢谢,通过谷歌搜索我的情况,我找到了解决方案并且效果很好。
    【解决方案2】:

    有了更多的谷歌和上面第一个答案的帮助,并使用关键字 glade,我在以下链接中找到了答案,如何使用 Glade 完成上述操作。

    Found Answer while using glade XML UI App

    if(strstr(string,"PASS"))
    {
        gdk_color_parse ("green", &color);
        gtk_list_store_set (get_gtk_list_store(), &iterr,COL, "PASS",COL_COLOR, &color,-1);
    }
    else if(strstr(string,"FAIL"))
    {
        gdk_color_parse ("red", &color);
        gtk_list_store_set (get_gtk_list_store(), &iterr,COL, "FAIL",COL_COLOR, &color,-1);
    }
    else if(strstr(string,"ABORT"))
    {
        gdk_color_parse ("red", &color);
        gtk_list_store_set (get_gtk_list_store(), &iterr,COL, "FAIL",COL_COLOR, &color,-1);
    }
    else
    {
        gdk_color_parse ("yellow", &color);
        gtk_list_store_set (get_gtk_list_store(), &iterr,COL, "N / A",COL_COLOR, &color,-1);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-15
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 2017-06-29
      • 2013-01-21
      • 1970-01-01
      相关资源
      最近更新 更多