如何获取激活行GTK的数据+;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

“行激活”信号激活后,如何获取所选行的数据?我用的是C语言

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, &param1,
                       INDEX_field_2, &param2,
                       ...
                       -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, &param1,
                       INDEX_field_2, &param2,
                       ...
                       -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嵌入式数据库填充。我想我的问题很简单。选择行时,如何获取该行中包含的数据?