0

GUIアプリケーションを作成する必要があるため、gtkを調べ始めたところです。これは IM アプリケーションであり、ユーザーがログインしたときに友人リストを表示する必要があります。リストには、以下に示すように、左側に小さな画像、右側に名前が表示されます。

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

3 つの Pic1 と Pic2 がまだ上の 1 つの画像を表していることに注意してください。

また、私は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 に答える