C gtk获取在liststore树视图中单击的项目

C gtk获取在liststore树视图中单击的项目,c,linux,list,treeview,gtk,C,Linux,List,Treeview,Gtk,我想获取在树视图中单击的项目,它会导致“行激活”事件。我在树视图中有一个列表存储。单击其中的任何项目将显示另一个列表。但我如何知道单击了哪个项目? 我怎么找到它? 代码- 双击(行激活)获取树状视图选择的最常见方法是: 1。使用激活的行中的变量回调 行激活的信号处理程序信号为: 我们可以从带有暴露变量的模型中检索数据;从GtkTreePath路径我们得到GtkTreeIter iter,从GtkTreeView树视图我们可以得到GtkTreeModel。拥有模型和iter我们可以从模型检索数据;

我想获取在树视图中单击的项目,它会导致“行激活”事件。我在树视图中有一个列表存储。单击其中的任何项目将显示另一个列表。但我如何知道单击了哪个项目? 我怎么找到它? 代码-


双击(
行激活)获取
树状视图
选择的最常见方法是:

1。使用激活的
行中的变量
回调

行激活的信号处理程序
信号为:

我们可以从带有暴露变量的模型中检索数据;从
GtkTreePath路径
我们得到
GtkTreeIter iter
,从
GtkTreeView树视图
我们可以得到
GtkTreeModel
。拥有
模型
iter
我们可以从
模型
检索数据;例如,在
replace_选项卡中添加以下内容:

static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
{
   gchar *string;
   GtkTreeIter iter;
   GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
   gtk_tree_model_get_iter(model, &iter, path); 
   gtk_tree_model_get (model, &iter, 0, &string, -1);
   g_print ("activated: %s\n", string);
   ...

 }
static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
{ 
   gchar *string;
   GtkTreeIter iter;
   GtkTreeSelection *selection;
   GtkTreeModel *model = gtk_tree_view_get_model (tree_view);

   selection = gtk_tree_view_get_selection (tree_view);
   gtk_tree_selection_get_selected (selection, &model, &iter); 
   gtk_tree_model_get (model, &iter, 0, &string, -1);
   g_print ("activated: %s\n", string);
   ...
}
这将打印激活行中的文本

2。使用GtkTreeSelection

另一个选项是使用
GtkTreeSelection
,我们可以从
GtkTreeView
本身检索它。此步骤允许我们提取所选的
iter
(树状图上的单个选择),我们将使用该步骤从
模型中获取数据;例如,在
replace_选项卡中添加以下内容:

static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
{
   gchar *string;
   GtkTreeIter iter;
   GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
   gtk_tree_model_get_iter(model, &iter, path); 
   gtk_tree_model_get (model, &iter, 0, &string, -1);
   g_print ("activated: %s\n", string);
   ...

 }
static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
{ 
   gchar *string;
   GtkTreeIter iter;
   GtkTreeSelection *selection;
   GtkTreeModel *model = gtk_tree_view_get_model (tree_view);

   selection = gtk_tree_view_get_selection (tree_view);
   gtk_tree_selection_get_selected (selection, &model, &iter); 
   gtk_tree_model_get (model, &iter, 0, &string, -1);
   g_print ("activated: %s\n", string);
   ...
}
结论:

选项1)更简单、更干净、更直接。通常2)它用于通过
GtkTreeSelection
发出的
changed
信号获取选择更改