我刚开始研究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语言编写应用程序。
建议?
答案 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)
隐藏列标题。这似乎也删除了列分隔符,虽然我找不到有关此行为的任何文档。