我刚刚开始研究gtk,因为我必须用它来编写GUI应用程序。这是一个即时消息应用程序,我需要在用户登录时向他/她显示他/她的朋友列表。列表左边是小图片,右边是名字,如下图所示:
Friends
-----------
Pic1 John
Pic2 Sara
... ...据我所知,我认为最好的套装是Treeview,但它有恼人的分隔符和标题,所以列表如下:
Friends
------------
PIC | Name
------------
Pic1 | John
------------
Pic2 | Sara有什么办法可以解决这个问题吗?或者有更好的方法来实现这一点?
我还想在name部分包含更多信息,如下所示:
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请注意,上面的三个Pic1s和Pic2s仍然代表一张图片。
另外,我正在用C语言编写应用程序。
有什么建议吗?
发布于 2012-07-08 05:15:38
您可以在文本单元格渲染器中使用多行字符串。例如,下面是我使用的一个应用程序的示例: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-08 01:36:26
对于TreeView,可以使用gtk_tree_view_set_headers_visible(view,false)隐藏列标题。这似乎也删除了列分隔符,尽管我找不到任何关于此行为的文档。
https://stackoverflow.com/questions/11376185
复制相似问题