Я новичок в GTK. Последнее приложение GUI, которое я написал, использовало графический интерфейс текстового режима в Turbo C, поэтому я немного догоняю.Как получить выбор из gtk3 combobox с древовидной моделью
Я использую GTK для написания тестового жгута для некоторого кода, который в конечном итоге будет во встроенной системе. Я использую combobox с древовидной моделью, чтобы обеспечить двухуровневый выбор. Я получил combobox для отображения, как я хотел, хотя у меня нет хорошего недоразвития частей cell_renderer, которые я только что скопировал и вставил из другого вопроса переполнения стека.
GtkTreeStore* model = gtk_tree_store_new(1,G_TYPE_STRING)
(Initilise model to hold desired strings using
gtk_tree_store_append and gtk_tree_store_set)
GtkWidget* combobox = gtk_combo_box_new_with_model(model);
gtk_combo_box_set_entry_text_column(combobox, 0);
GtkCellRenderer *column = gtk_cell_renderer_text_new();
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox),column,TRUE);
gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox), column,"text", 0,NULL);
Этот код работал, чтобы отображать выпадающие списки. Теперь мне нужно было выбрать выделение из выпадающего списка. Я попытался получить индекс из combobox, используя gtk_combo_box_get_active(). Возвращенный индекс мне не помог. Для элементов поддерева Он только показывал положение относительно родителя. Итак, я попытался вытащить текст выбранного варианта. Немного больше поиска нашел мне эту линию, чтобы вытащить текст из выпадающего списка:
gchar * selection = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(MyCombobox))));
однако, называя это дало мне следующую ошибку, и возвращается (нуль).
(test.exe:3040): GLib-GObject-WARNING **: invalid cast from `GtkCellView' to `GtkEntry'
(test.exe:3040): Gtk-CRITICAL **: gtk_entry_get_text: assertion `GTK_IS_ENTRY (entry)' failed
Итак, немного больше прибегая к помощи указала, что мне нужно, чтобы инициализировать выпадающий с «входом», так обновили свою инициализацию выпадающего списка, чтобы:
combobox = gtk_combo_box_new_with_model_and_entry(model);
И частичный успех !!. Теперь я могу вытащить текст из combobox, , но он отображает текст выделения дважды, в раскрывающемся списке выпадающих списков. Как только выбор сделан, он отображает сингл в самом окне. поэтому, если моя модель текст:
opt10
opt11
opt20
opt21
Дерево отображает каждый пункт дважды (выбирая первый opt11)
[opt10 opt10] > opt10 opt10
[opt11 opt11]
opt20 opt20 >
После того, как я делаю свой выбор, (скажем opt11) выпадающий список отображает выбранный текст правильно , и мой вызов gtk_entry_get_text (.....) возвращает текст «opt11», как я ожидаю.
Итак, я в тупике. Я хочу запросить combobox, чтобы получить либо индекс, который однозначно идентифицирует элемент в дереве, либо текстовую строку. У меня есть метод текстовой строки, но он отображает параметры combobox дважды.
Помощь?
Спасибо,
Спасибо. Так оно и было. Трюк был двухступенчатым; 1) Получить выбранный элемент в combobox с помощью итератора; 2) Потяните модель из выпадающего списка (или, я думаю, вы могли бы использовать оригаль-моэдэль, если она все еще висит вокруг); 3) Используйте итератор, чтобы индексировать исходную древовидную структуру, которую combobox использует в качестве модели для получения выбранного значения –