如何获取激活行的数据 GTK+ C

How to get the data of an activated row GTK+ C

"row-activated"信号激活后,如何获取选中行的数据?我用的是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);
  }
}

row-activated 信号的回调原型应该是:

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

这意味着您将拥有对树视图(和相关 model/store)和选定路径的引用。这应该足以从激活的行中提取数据。

假设您的 model/store 第一列有一些整数作为 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
   }
}