如何获取激活行GTK的数据+;C
“行激活”信号激活后,如何获取所选行的数据?我用的是C语言如何获取激活行GTK的数据+;C,c,gtk,gtk3,glade,C,Gtk,Gtk3,Glade,“行激活”信号激活后,如何获取所选行的数据?我用的是C语言 void on_treeview1_row_activated() { //I want to get the data here } 没有你的代码,我只能给出一个粗略的方向: 在回调中,您将获得指向行的路径: static void on_treeview1_row_activated(GtkTreeView *tree_view, GtkTreePath
void on_treeview1_row_activated()
{
//I want to get the data here
}
没有你的代码,我只能给出一个粗略的方向: 在回调中,您将获得指向行的路径:
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);
}
}
没有你的代码,我只能给出一个粗略的方向: 在回调中,您将获得指向行的路径:
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);
}
}
信号的回调原型应为:
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
}
}
信号的回调原型应为:
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
}
}
这还不足以给出一个具体的答案。至少,您应该添加如何声明、初始化treeview等。最好的方法是创建一个。不幸的是,我无法发布所有代码行,因为它大约有2000行。我正在使用glade构建整个UI。树状视图的模型是一个列表存储,列表存储通过SQLite嵌入式数据库填充。我想我的问题很简单。选择行时,如何获取该行中包含的数据?这不足以给出具体答案。至少,您应该添加如何声明、初始化treeview等。最好的方法是创建一个。不幸的是,我无法发布所有代码行,因为它大约有2000行。我正在使用glade构建整个UI。树状视图的模型是一个列表存储,列表存储通过SQLite嵌入式数据库填充。我想我的问题很简单。选择行时,如何获取该行中包含的数据?