2017-08-06 26 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

它现在有效,非常帮助我,谢谢! –

相关问题