#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. Я просто отмечаю это, потому что я сдался и написал обработчики сигналов вручную