如何获取激活行的数据GTK + C
问题描述:
激活“行激活”信号后,如何获取所选行的数据?我正在使用C语言。如何获取激活行的数据GTK + C
void on_treeview1_row_activated()
{
//I want to get the data here
}
答
回调原型为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
它现在的作品非常帮助我,谢谢! –
答
没有你的代码,我只能给一个粗略的方向:
在回调你得到一个路径,你行:
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, ¶m1,
INDEX_field_2, ¶m2,
...
-1);
}
}
+0
它现在有效,非常帮助我,谢谢! –
这是没有足够的代码来给出具体的答案。至少,你应该添加如何声明你的树视图,初始化等。最好的方法是创建一个[mcve]。 –
不幸的是,我无法发布所有的代码行,因为它大约是2000行。我使用glade来构建整个UI。树视图的模型是一个列表存储,列表存储通过SQLite嵌入式数据库填充。 所以我的问题很简单,我认为。当该行被选中时,如何获取该行中包含的数据? –