2017-11-21 11 views
1

"行起動"イベントを引き起こすツリービューでクリックされたアイテムを取得したいと思います。私はツリービューのリストストアを持っています。それをクリックすると、別のリストが表示されます。しかし、どのアイテムがクリックされたのかはどのように分かりますか? どうすればわかりますか? コード -gtk-liststoreツリービューでどのアイテムがクリックされたかを取得

GtkWidget * init_tree() 
{ 

    GtkListStore *liststore = gtk_list_store_new(1, G_TYPE_STRING); 
    GtkTreeIter treeiter; 

    gtk_list_store_append(liststore, &treeiter); 
    gtk_list_store_set(liststore, &treeiter, 0, "Register", -1); 
    gtk_list_store_append(liststore, &treeiter); 
    gtk_list_store_set(liststore, &treeiter, 0, "New Configuration", -1); 
    gtk_list_store_append(liststore, &treeiter); 
    gtk_list_store_set(liststore, &treeiter, 0, "Edit Configuration", -1); 
    gtk_list_store_append(liststore, &treeiter); 
    gtk_list_store_set(liststore, &treeiter, 0, "Delete Configuration", -1); 
    gtk_list_store_append(liststore, &treeiter); 
    gtk_list_store_set(liststore, &treeiter, 0, "Add location to turn-off place list", -1); 
    gtk_list_store_append(liststore, &treeiter); 
    gtk_list_store_set(liststore, &treeiter, 0, "Disable Turn-off Places", -1); 
    gtk_list_store_append(liststore, &treeiter); 
    gtk_list_store_set(liststore, &treeiter, 0, "Enable Turn-off Places", -1); 
    gtk_list_store_append(liststore, &treeiter); 
    gtk_list_store_set(liststore, &treeiter, 0, "Disable Distance", -1); 
    gtk_list_store_append(liststore, &treeiter); 
    gtk_list_store_set(liststore, &treeiter, 0, "Enable Distance", -1); 
    gtk_list_store_append(liststore, &treeiter); 
    gtk_list_store_set(liststore, &treeiter, 0, "Factory Reset", -1); 
    gtk_list_store_append(liststore, &treeiter); 
    GtkWidget *treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore)); 

    GtkCellRenderer *cellrenderertext = gtk_cell_renderer_text_new(); 

    GtkTreeViewColumn *treeviewcolumn = gtk_tree_view_column_new_with_attributes("Settings", 
                       cellrenderertext, 
                       "text", 0, 
                       NULL); 
    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treeviewcolumn); 

    return treeview; 
} 

static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) 
{ 
.......... 
} 

int main(...) 
{ 
.... 
g_signal_connect(treeview, "row-activated", G_CALLBACK(replace_tab), (gpointer) parameters); 

..... 
} 

答えて

1

ダブルクリックでtreeview選択(row-activated)を取得するための最も一般的な方法は以下のとおりです。row-activatedからrow-activatedコールバック

シグナルハンドラからの変数を使用して

1信号:

void 
user_function (GtkTreeView  *tree_view, 
       GtkTreePath  *path, 
       GtkTreeViewColumn *column, 
       gpointer   user_data) 

公開された変数を使用してモデルからデータを取得できます。 GtkTreePath pathからGtkTreeIter iterを取得し、GtkTreeView treeviewからGtkTreeModel modelを得ることができます。 modeliterを持つと、modelからデータを取得できます。例えば。あなたのreplace_tabシグナルハンドラでは、次の行を追加します。

static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) 
{ 
    gchar *string; 
    GtkTreeIter iter; 
    GtkTreeModel *model = gtk_tree_view_get_model (tree_view); 
    gtk_tree_model_get_iter(model, &iter, path); 
    gtk_tree_model_get (model, &iter, 0, &string, -1); 
    g_print ("activated: %s\n", string); 
    ... 

} 

これは、別のオプションは、我々が取得できたGtkTreeSelectionを使用することですGtkTreeSelection

を使用して活性化行

2からのテキストを印刷する必要がありますGtkTreeView自体から。このステップでは、選択したiter(ツリービューでの単一選択)を抽出し、modelからデータを取得します。例えば、あなたのreplace_tabシグナルハンドラでは、次の行を追加します。

static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) 
{ 
    gchar *string; 
    GtkTreeIter iter; 
    GtkTreeSelection *selection; 
    GtkTreeModel *model = gtk_tree_view_get_model (tree_view); 

    selection = gtk_tree_view_get_selection (tree_view); 
    gtk_tree_selection_get_selected (selection, &model, &iter); 
    gtk_tree_model_get (model, &iter, 0, &string, -1); 
    g_print ("activated: %s\n", string); 
    ... 
} 

結論:

オプション1)それが簡単に、きれいでまっすぐ進むのです。通常は2)は、GtkTreeSelectionによって放出されたchangedシグナルによって選択変更を取得するために使用されます。

関連する問題