0

我刚刚开始研究 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 编写应用程序。

建议?

4

2 回答 2

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);
}
于 2012-07-07T21:15:38.190 回答
0

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

于 2012-07-07T17:36:25.810 回答