2
for(int i=0; i<2; i++) {
types[i] = G_TYPE_STRING;
}
types[2] = G_TYPE_BOOLEAN;
tree_store = gtk_list_store_newv(3, types);
tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(tree_store));
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), tree_view);
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes ("Level",renderer,"text",0,NULL);
gtk_tree_view_column_set_sort_column_id (column, 0);
gtk_tree_view_column_set_resizable (column, true);
gtk_tree_view_append_column (GTK_TREE_VIEW(tree_view), column);
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes ("URL",renderer,"text",1,NULL);
gtk_tree_view_column_set_sort_column_id (column, 1);
gtk_tree_view_column_set_resizable (column, true);
gtk_tree_view_append_column (GTK_TREE_VIEW(tree_view), column);
renderer = gtk_cell_renderer_toggle_new();
column = gtk_tree_view_column_new_with_attributes ("Image",renderer,"active",2,NULL);
gtk_tree_view_column_set_sort_column_id (column, 2);
gtk_tree_view_column_set_resizable (column, true);
gtk_tree_view_append_column (GTK_TREE_VIEW(tree_view), column);
for(int i=0; i<mapTiles.size(); i++) {
GtkTreeIter iter;
gtk_list_store_append(tree_store, &iter);
gtk_list_store_set(tree_store, &iter, 0, "A", -1);
gtk_list_store_set(tree_store, &iter, 1, "B", -1);
gtk_list_store_set(tree_store, &iter, 2, FALSE, -1);
}
なぜですか? 私は、文字列と最後にチェックボックスを含む2つの列を持つツリービューを作成しようとしています。今はチェックボックスが表示されますが、切り替えることはできません。GTKTreeViewのGTKCellRendererToggle
ありがとうございました!コールバック関数を呼び出すことができます。ただし、cell_renderer-> active = trueを実行しても、チェックボックスはクリックされません。それをチェックする方法を知っていますか? –
cell_rendererではなく、モデルを変更する必要があります。コールバックで、列2を反対の値に設定します。コールバックはパスからパスを取得し、iterはカラム2の実際の値(gtk_tree_model_get(...))を取得し、gtk_list_store_setを使用して値を反対(ネゲート)に設定します。トグルは列2にバインドされており、** user_data **を使用してtree_view(モデルを取得できる)を渡すことができます。 –
編集者に感謝します。私は働いていて、すぐに返答しようとしました。私はいくつかの間違いがあることを知っていましたが、それらを修正する時間がありませんでした。貢献に感謝します。 –