首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么即使在iter有效的情况下,gtk_tree_selection_select_iter()也不选择另一行的子行?

为什么即使在iter有效的情况下,gtk_tree_selection_select_iter()也不选择另一行的子行?
EN

Stack Overflow用户
提问于 2012-07-18 14:29:22
回答 1查看 1.5K关注 0票数 0

我有一个与斯考斯一起工作的应用程序(这里代码)。每次选择一行时,都会调用回调。此回调应该检索选定的行并以某种方式处理其数据。

我的应用程序有时必须选择这个树视图本身的一些行:

代码语言:javascript
复制
// Selecting a line
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model), &iter, "0");
GtkTreeSelection *selection =
        gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
gtk_tree_selection_select_iter(selection, &iter);

当我必须选择一条toplevel线,也就是一条从根部直接向下的线时,这是很好的。但是,如果我试图选择一个子行(例如,第三行中的第一个子行),则在回调函数(sscce代码这里,仅在第42行更改)上出现了一个错误:

代码语言:javascript
复制
// Selecting a line
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model), &iter, "2:0");
GtkTreeSelection *selection =
        gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
gtk_tree_selection_select_iter(selection, &iter);

错误是以下警告,后面跟着分段错误:

(树状图:1843):Gtk-关键**:gtk_tree_store_get_path:断言iter->user\_data != NULL' failed (treetest:1843): Gtk-CRITICAL \*\*: IA\_\_gtk\_tree\_model\_get\_string\_from\_iter: assertion路径!= NULL‘failed

而且,当我用鼠标选择同一行时,这个错误永远不会发生。

怎么可能是?所选路径"2:0"是有效的,但是从选择返回的iter不是,所以我假设该行没有被选中。为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-18 14:29:22

问题是,托普莱尔线是折叠的。它的子行是隐藏的,因此不能被选中。

一种解决方案是在选择其子行之前按顺序展开父行(sscce代码这里):

代码语言:javascript
复制
// Expanding
GtkTreePath *path = gtk_tree_path_new_from_string("2");
gtk_tree_view_expand_row(GTK_TREE_VIEW(tree_view), path, TRUE);
// Selecting a line
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model), &iter, "2:0");
GtkTreeSelection *selection =
        gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
gtk_tree_selection_select_iter(selection, &iter);

当然,这个错误只是在我通过编程选择行时发生的,因为不可能选择折叠行的子行单击它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11543716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档