gtk-get 在列表存储树视图中单击了哪个项目
gtk-get which item is clicked in the liststore treeview
我想获取在导致 "row-activated" 事件的树视图中单击的项目。我在树视图中有一个列表存储。单击它的任何项目显示另一个列表。但是我怎么知道点击了哪个项目呢?
我怎么找到它?
代码-
GtkWidget * init_tree()
{
GtkListStore *liststore = gtk_list_store_new(1, G_TYPE_STRING);
GtkTreeIter treeiter;
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Register", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "New Configuration", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Edit Configuration", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Delete Configuration", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Add location to turn-off place list", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Disable Turn-off Places", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Enable Turn-off Places", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Disable Distance", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Enable Distance", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Factory Reset", -1);
gtk_list_store_append(liststore, &treeiter);
GtkWidget *treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));
GtkCellRenderer *cellrenderertext = gtk_cell_renderer_text_new();
GtkTreeViewColumn *treeviewcolumn = gtk_tree_view_column_new_with_attributes("Settings",
cellrenderertext,
"text", 0,
NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treeviewcolumn);
return treeview;
}
static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
{
..........
}
int main(...)
{
....
g_signal_connect(treeview, "row-activated", G_CALLBACK(replace_tab), (gpointer) parameters);
.....
}
在双击 (row-activated
) 时获得 treeview
选择的最常见方法是:
1.使用来自 row-activated
回调的变量
来自 row-activated
信号的信号处理程序是:
void
user_function (GtkTreeView *tree_view,
GtkTreePath *path,
GtkTreeViewColumn *column,
gpointer user_data)
我们可以使用公开的变量从模型中检索数据;从 GtkTreePath path
我们可以得到 GtkTreeIter iter
,从 GtkTreeView treeview
我们可以得到 GtkTreeModel model
。有了 model
和 iter
我们可以从 model
中检索数据;例如。在您的 replace_tab
信号处理程序中,添加以下内容:
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);
...
}
这应该打印激活行中的文本
2。使用 GtkTreeSelection
另一种选择是使用 GtkTreeSelection
,我们可以从 GtkTreeView
本身检索它。这一步允许我们提取选定的 iter
(树视图上的单选),我们将从 model
中获取数据;例如,在您的 replace_tab
信号处理程序中,添加以下内容:
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
信号获取选择更改
我想获取在导致 "row-activated" 事件的树视图中单击的项目。我在树视图中有一个列表存储。单击它的任何项目显示另一个列表。但是我怎么知道点击了哪个项目呢? 我怎么找到它? 代码-
GtkWidget * init_tree()
{
GtkListStore *liststore = gtk_list_store_new(1, G_TYPE_STRING);
GtkTreeIter treeiter;
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Register", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "New Configuration", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Edit Configuration", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Delete Configuration", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Add location to turn-off place list", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Disable Turn-off Places", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Enable Turn-off Places", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Disable Distance", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Enable Distance", -1);
gtk_list_store_append(liststore, &treeiter);
gtk_list_store_set(liststore, &treeiter, 0, "Factory Reset", -1);
gtk_list_store_append(liststore, &treeiter);
GtkWidget *treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore));
GtkCellRenderer *cellrenderertext = gtk_cell_renderer_text_new();
GtkTreeViewColumn *treeviewcolumn = gtk_tree_view_column_new_with_attributes("Settings",
cellrenderertext,
"text", 0,
NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treeviewcolumn);
return treeview;
}
static void replace_tab(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
{
..........
}
int main(...)
{
....
g_signal_connect(treeview, "row-activated", G_CALLBACK(replace_tab), (gpointer) parameters);
.....
}
在双击 (row-activated
) 时获得 treeview
选择的最常见方法是:
1.使用来自 row-activated
回调的变量
来自 row-activated
信号的信号处理程序是:
void user_function (GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)
我们可以使用公开的变量从模型中检索数据;从 GtkTreePath path
我们可以得到 GtkTreeIter iter
,从 GtkTreeView treeview
我们可以得到 GtkTreeModel model
。有了 model
和 iter
我们可以从 model
中检索数据;例如。在您的 replace_tab
信号处理程序中,添加以下内容:
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);
...
}
这应该打印激活行中的文本
2。使用 GtkTreeSelection
另一种选择是使用 GtkTreeSelection
,我们可以从 GtkTreeView
本身检索它。这一步允许我们提取选定的 iter
(树视图上的单选),我们将从 model
中获取数据;例如,在您的 replace_tab
信号处理程序中,添加以下内容:
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
信号获取选择更改