gtk + 2.0哪个小部件用于好友列表?

时间:2012-07-07 15:19:54

标签: c gtk

我刚开始研究gtk,因为我必须用它编写一个GUI应用程序。这是一个IM应用程序,我需要在用户登录时向用户显示他/她的朋友列表。该列表应在左侧显示一个小图片,在右侧显示名称,如下所示:

Friends
-----------
Pic1  John
Pic2  Sara
...   ...

据我所知,到目前为止,我认为最好的套装是Treeview,但它有令人讨厌的分隔符和标题,所以列表是这样的:

Friends
------------
PIC  |  Name
------------
Pic1 |  John
------------
Pic2 |  Sara

无论如何要解决这个问题?或者有更好的方法来实现这一目标吗?

另外,我想在名称部分中包含更多信息,如下所示:

Friends
----------
Pic1  John
Pic1  This is more about John
Pic1  Still more about John
Pic1  Sara
Pic1  This is more about Sara
Pic1  Still more about Sara

请注意,三个Pic1和Pic2仍然代表上面的一张图片。

我也在用C语言编写应用程序。

建议?

2 个答案:

答案 0 :(得分:2)

您可以在文本单元格渲染器中使用多行字符串。例如,这是我工作的应用程序的示例:https://github.com/wmvanvliet/Chimara/blob/browser/player/browser.c

在单元格渲染器上设置自定义数据功能:

gtk_tree_view_column_set_cell_data_func(column, renderer, (GtkTreeCellDataFunc)text_function, NULL, NULL);

这是一个自定义数据函数的示例,它可以很好地将作品发布的标题,作者和年份格式化为单元格渲染器的标记属性:

static void
text_function(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
{
    char *title, *author, *rendered_string;
    unsigned year;
    gtk_tree_model_get(model, iter,
        1, &title,
        2, &author,
        3, &year,
        -1);
    rendered_string = g_strdup_printf("<big><big><b><i>%s</i></b></big>\nby %s</big> (%d)", title, author, year);
    g_object_set(cell, "markup", rendered_string, NULL);
}

答案 1 :(得分:0)

对于TreeView,可以使用gtk_tree_view_set_headers_visible(view,false)隐藏列标题。这似乎也删除了列分隔符,虽然我找不到有关此行为的任何文档。