2012-07-07 20 views
0

我剛開始研究gtk,因爲我必須用它編寫一個GUI應用程序。這是一個即時通訊應用程序,我需要向用戶顯示他/她的朋友列表時,他或她登錄該列表應顯示在左側和名稱的小圖片上右邊,像圖所示:gtk + 2.0哪個小部件用於朋友列表?

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

據我所知,到目前爲止,我認爲最好的西裝是樹視圖,但它有惱人的分離器和頭部因此名單是這樣的:

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 

注意三個Pic1s和Pic2s仍占上方一張圖片。

另外我正在用C編寫應用程序。

建議?

+0

可能您會想爲此創建自己的複合控件,然後將它們的列表打包到滾動容器中。 – mlibby 2012-07-07 16:04:35

回答

0

對於TreeView,列標題可以用gtk_tree_view_set_headers_visible(view,false)隱藏。這似乎也刪除列分隔符,雖然我找不到任何有關此行爲的文檔。

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); 
}