が付いたアプリケーション(ここで機能するsscceコード)があります。行が選択されるたびに、コールバックが呼び出されます。このコールバックは、選択された行を取得し、そのデータを何らかの方法で処理する必要があります。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_VIEW(tree_view));
gtk_tree_selection_select_iter(selection, &iter);
これは、最上位の線、つまりルートから直接下がる線を選択する必要がある場合にうまく機能します。ただし、子行(たとえば、3行目の最初の子行)を選択しようとすると、コールバック関数でエラーが発生しました(ここでは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);
エラーは、次の警告とそれに続くセグメンテーション違反です。
(treetest:1843):Gtk-CRITICAL **:gtk_tree_store_get_path:アサーション `iter-> user_data!=NULL'が失敗しました
(treetest:1843):Gtk-CRITICAL **:IA__gtk_tree_model_get_string_from_iter:アサーション `path!=NULL'が失敗しました
また、マウスで同じ行を選択しても、このエラーは発生しません。
どうして?選択されたパス"2:0"
は有効ですが、選択から返されたiterは有効ではないため、行が選択されていないと思います。なんで?