我有一个与斯考斯一起工作的应用程序(这里代码)。每次选择一行时,都会调用回调。此回调应该检索选定的行并以某种方式处理其数据。
我的应用程序有时必须选择这个树视图本身的一些行:
// 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行更改)上出现了一个错误:
// 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不是,所以我假设该行没有被选中。为什么?
发布于 2012-07-18 14:29:22
问题是,托普莱尔线是折叠的。它的子行是隐藏的,因此不能被选中。
一种解决方案是在选择其子行之前按顺序展开父行(sscce代码这里):
// 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);当然,这个错误只是在我通过编程选择行时发生的,因为不可能选择折叠行的子行单击它。
https://stackoverflow.com/questions/11543716
复制相似问题