2017-08-06 64 views
1

激活「行激活」信號後,如何獲取所選行的數據?我正在使用C語言。如何獲取激活行的數據GTK + C

void on_treeview1_row_activated() 
{ 
//I want to get the data here 
} 
+0

這是沒有足夠的代碼來給出具體的答案。至少,你應該添加如何聲明你的樹視圖,初始化等。最好的方法是創建一個[mcve]。 –

+0

不幸的是,我無法發佈所有的代碼行,因爲它大約是2000行。我使用glade來構建整個UI。樹視圖的模型是一個列表存儲,列表存儲通過SQLite嵌入式數據庫填充。 所以我的問題很簡單,我認爲。當該行被選中時,如何獲取該行中包含的數據? –

回答

1

回調原型爲row-activated信號應該是:

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

這意味着,你將不得不到TreeView(以及相關的模型/存儲)和所選路徑引用。這應該足以從激活的行提取數據。

假設你的模型/存儲具有作爲第一列一些整數作爲ID和串的第二列:

| ID | TEXT  | 
+----+------------+ 
| 12 | John Doe | 
... 
| 35 | Whatever | 
+----+------------| 

所以你的回調函數應該是這樣的:

void on_treeview1_row_activated(GtkTreeView  *treeview, 
           GtkTreePath  *path, 
           GtkTreeViewColumn *column, 
           gpointer userdata) { 

    gint int_data; 
    gchar *str_data; 

    GtkTreeIter iter; 
    GtkTreeModel *model = gtk_tree_view_get_model(treeview); 

    if (gtk_tree_model_get_iter(model, &iter, path)) { 
     gtk_tree_model_get (GTK_LIST_STORE(model), &iter, 0, &int_data, 1, &str_data, -1)); 
     // Here the variables int_data and str_data should be filled with 
     // relevant data 
    } 
} 
+0

它現在的作品非常幫助我,謝謝! –

2

沒有你的代碼,我只能給一個粗略的方向:

在回調你得到一個路徑,你行:

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

從那裏你可以得到一個迭代器...

GtkTreeIter iter; 
    if (gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path)) 
    { 

...,並從列表中存儲所需的字段:

gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, 
         INDEX_field_1, &param1, 
         INDEX_field_2, &param2, 
         ... 
         -1); 
    } 
} 
+0

它現在有效,非常幫助我,謝謝! –