2011-02-05 47 views
1

你好我使用glade寫一個小的gtk應用程序。 該應用程序包含一個列表存儲。並且每當用戶點擊一行時,我希望能夠獲取該行所包含的信息。c:GtkListStore行更改事件 - 我如何獲取所選行的數據?

使用下行改變了事件的林間空地,我增加了以下功能:

void gtk_tree_view_row_activated_event_handler(GtkWidget *widget, gpointer data) { 

    GtkTreeSelection *selection; 
    GList *rows_list; 

    selection = gtk_tree_view_get_selection(widget); 
    rows_list = gtk_tree_selection_get_selected_rows (selection, widget);  
} 

我如何從這裏繼續下去嗎?

回答

2

請,請檢查下面的代碼會爲你工作:

enum 
{ 
    LIST_ITEM = 0, 
    N_COLUMNS 
}; 

void view_selected_foreach_func(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer userdata) 
{ 
    char *value; 
    gtk_tree_model_get(model, iter, LIST_ITEM, &value, -1); 
    g_print("%s is selected\n", value); 
    g_free(value); 
} 

void gtk_tree_view_row_activated_event_handler(GtkWidget *widget, gpointer data) 
{ 
    GtkTreeSelection *selection; 
    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)); 
    gtk_tree_selection_selected_foreach(selection, view_selected_foreach_func, NULL); 
} 

我想另一種方式來實現你想要做將定義一個處理程序的GtkTreeSelection changed信號是什麼。下面是一個小例子:

建立樹狀圖:

list = gtk_tree_view_new(); 
... 
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); 
g_signal_connect(selection, "changed", G_CALLBACK(on_changed), label); 

改變信號處理程序:

void on_changed(GtkWidget *widget, gpointer label) 
{ 
    GtkTreeIter iter; 
    GtkTreeModel *model; 
    char *value; 

    if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(widget), &model, &iter)) 
    { 
     gtk_tree_model_get(model, &iter, LIST_ITEM, &value, -1); 
     g_print("%s is selected\n", value); 
     g_free(value); 
    } 
} 

希望這會有所幫助,至於

+0

它看起來很棒!我一回到家就要測試它。非常感謝! – ufk 2011-02-07 08:45:52