1

GUI に C/C++ と Glade 3 を使用するアプリケーションを作成しています。

GUI の一部には、TreeView各行がユーザーを表す複数行が含まれています。列 2 にはCellRendererCombo製品ブランドを表す があり、列 3 にはCellRendererCombo製品を表す別の列があります。

私がやろうとしているのは、ユーザーの製品ブランド (列 2) を設定するたびに、製品のオプションCellRendererCombo(列 3) にそのブランドの製品のみを表示することです。

モデルを更新しようとしましたが、列内のg_object_setすべてが更新CellRendererComboされます。

4

2 に答える 2

0

g_object_setコンボボックスのモデルを設定するために使用したことがわかったように、列全体のモデルを設定します。あなたがする必要があるのは、ツリービューに使用しているモデルに列(COLUMN_COMBOBOX_MODEL)を持ち、各行のコンボボックスで使用したいモデルへの参照を格納し、セルレンダラーのプロパティgtk_tree_view_column_add_attribute (column, combobox_renderer, "model", COLUMN_COMBOBOX_MODEL)をマップするようなことをすることですmodel各行の適切なモデルに。g_object_set を使用して、セル レンダラーの"text-column"およびプロパティを設定できます。"editable"

于 2013-10-12T09:31:23.767 に答える
0

空き地で:

  1. 私がする必要があったのは、タイプの新しい列をGtkTreeModel私のモデルに追加することでしたTreeView。残念ながらGtkTreeModel、列を作成するときに Glade が提供するドロップダウン リストの一部ではないためGtkTreemodel、タイプ列に手動で入力しました。
  2. CellRendererCombo次に、製品を表すを編集し、作成したばかりの列をモデルとして定義します。

ソースコード内:

  1. のモデルにデータをロードするときは、TreeView行ごとに新しい行を作成し、ListStoreそれへの参照をTreeViewモデルに保存します。

    gtk_list_store_set (GTK_LIST_STORE(data->liststore_analysis), &iter, COLUMN_MODEL, GTK_LIST_STORE(data->liststore_products), -1);
    
  2. CellRendererComboブランドを表すの値を変更すると、他の のモデルの行が更新されCellRendererComboます。

    GtkListStore * list = GTK_LIST_STORE(data->liststore_products);
    GtkTreeIter iter;
    const char * openmoko[] = {"Neo 1973","Neo FreeRunner","Dash Express","3D7K","WikiReader"};
    int i, openmokoModels = sizeof (openmoko) / sizeof (*openmoko);
    for (i = 0; i < openmokoModels; i++){
        gtk_list_store_append(list, &iter);
        gtk_list_store_set(list, &iter, 0, openmoko[i], -1);
    }
    

助けてくれてありがとう!:)

于 2013-10-16T13:49:09.923 に答える