Как получить столбец GtkTreeViewColumn для GtkCellRenderer?

#c #callback #gtk #viewmodel

#c #обратный вызов #gtk #viewmodel

Вопрос:

Некоторые проверки исходного кода gtk привели меня к мысли, что следующий код может получить столбец в модели, где хранится атрибут.

Однако, чтобы перейти к этой точке из обработчика сигналов, мне нужно получить GtkCellRenderer родительский элемент GtkTreeViewColumn

Я не знаю, как это сделать, кроме прямой передачи столбца treeview (что исключает мою возможность включать модель, которую необходимо обновить в первую очередь) или передачи самого GtkTreeView , что дало бы мне доступ к модели, но не к GtkTreeViewColumn

Довольно сложная проблема. Конечно, если кто-нибудь знает встроенную функцию GTK для перехода от GtkCellRenderer прямого к GtkListStore , это было бы намного лучше.

 void
treeview_combo_edited(GtkCellRendererCombo * widget, gchar * path, gchar * value, GtkListStore * model){
    GtkTreeIter iter;
    gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),amp;iter,path);
    // How to get GtkCellRenderer's GtkTreeViewColumn to use in line below?
    GSList * attributes = g_object_get(treeviewcolumn,attributes);
    int colnumber = g_slist_nth_data(g_slist_position(g_slist_find(attributes,"text")) - 1);
    gtk_list_store_set
    (
        model,
        amp;iter,
        colnumber,
        value,
        -1
    );
}
  

Редактировать: Возможно, было бы возможно передать treeviewcolumn напрямую, чтобы получить обе необходимые переменные, но я столкнулся с проблемами с получением атрибутов средства визуализации ячеек. Как мне их вообще получить?

Ответ №1:

Да, этот API, похоже, отсутствует. В своем коде я использую

 GtkTreeViewColumn *column = gtk_tree_view_column_new();
GtkCellRenderer* renderer = gtk_cell_renderer_text_new();
g_object_set_qdata_full(G_OBJECT(renderer), g_quark_from_static_string("column"), (gpointer)column, NULL);
  

а затем позже вы можете использовать

 GtkTreeViewColumn* column = (g_object_get_qdata(G_OBJECT(renderer), g_quark_from_static_string("column"));
  

Чтобы получить столбец из объекта средства визуализации.

Комментарии:

1. Хорошо, но я использую glade здесь, и я не хочу вечно тратить время на выяснение, как это сделать в glade…

2. Я просто отмечаю это, потому что я сдался и написал обработчики сигналов вручную