为什么gtk_tree_selection_select_iter()即使在iter有效时也不选择另一行的子行?

为什么gtk_tree_selection_select_iter()即使在iter有效时也不选择另一行的子行?,gtk,gtk2,gtktreeview,Gtk,Gtk2,Gtktreeview,我有一个应用程序(可以工作的代码)和。每次选择一行时,都会调用回调。此回调应检索所选行并以某种方式处理其数据 我的应用程序有时必须选择此树视图本身的某些行: // 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_

我有一个应用程序(可以工作的代码)和。每次选择一行时,都会调用回调。此回调应检索所选行并以某种方式处理其数据

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

// 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);
当我必须选择一条顶层线时,这很有效,也就是说,一条从根部直接向下的线。但是,如果我尝试选择一个子行(例如,第三行中的第一个子行),我在回调函数中得到一个错误(sscce代码,仅在第42行更改):

错误为以下警告,然后是segfault:

(treetest:1843):Gtk CRITICAL**:Gtk_tree_store_get_path:assertion`iter->user_data!=“NULL”失败

(treetest:1843):Gtk临界**:IA_Gtk_树_模型_获取_字符串_自_iter:assertion`path!=“NULL”失败

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


怎么可能呢?所选路径
“2:0”
有效,但从选择返回的iter无效,因此我假定该行未被选择。为什么?

问题是顶层线已折叠。其子行是隐藏的,因此无法选择它们

解决方案是在选择父行的一个子行(sscce代码)之前以编程方式展开父行:

当然,当我以编程方式选择行时,就会发生此错误,因为单击折叠行无法选择其子行

// 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);
// 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);