c gtk + -2 glade3: добавление текста в комбинированный список, загруженный из Gtk Builder - PullRequest
1 голос
/ 27 декабря 2010

Я изучаю GTK + 2 и glade 3. Я пытаюсь добавить текст в компонент со списком, который я загрузил из Gtk Builder.

Я использую следующий код:

output_right_combobox = GTK_WIDGET(gtk_builder_get_object(builder,"output_right_combobox"));
gtk_combo_box_append_text (GTK_COMBO_BOX(output_left_combobox),"aaa");  

Я получаю следующую критическую ошибку в строке gtk_combo_box_append_text:

Gtk-CRITICAL **: IA__gtk_combo_box_append_text: assertion `GTK_IS_LIST_STORE (combo_box->priv->model)' failed

Кажется, мне нужно использовать GtkListStore для этого, но я не могу найти способ использовать его и добавить в выпадающий список.есть идеи?

обновление

Я пытался сделать следующее:

    GtkTreeIter iter;
GtkListStore *store = gtk_list_store_new (1, G_TYPE_STRING);
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, 0, "foo", -1);

gtk_combo_box_set_model (GTK_COMBO_BOX(output_right_combobox), (GtkTreeModel *)store);

, но список со списком в приложении все еще пуст.

спасибо!

Ответы [ 2 ]

2 голосов
/ 01 января 2011

Вам нужно добавить GtkCellRenderer к вашему списку, чтобы он отображал текст:

gtk_combo_box_set_model (GTK_COMBO_BOX (output_right_combobox), GTK_TREE_MODEL(store));

GtkCellRenderer * cell = gtk_cell_renderer_text_new();
gtk_cell_layout_pack_start( GTK_CELL_LAYOUT( output_right_combobox ), cell, TRUE );
gtk_cell_layout_set_attributes( GTK_CELL_LAYOUT( output_right_combobox ), cell, "text", 0, NULL );
0 голосов
/ 01 мая 2012

Сначала заполните список, затем сделайте его видимым с помощью GtkCellRenderer:

GtkTreeIter iter;
GtkListStore *store = gtk_list_store_new(1,G_TYPE_STRING);
GtkCellRenderer *cell = gtk_cell_renderer_text_new();

gtk_list_store_append(store,&iter);
gtk_list_store_set(store,&iter,0,"1st list item",-1);
gtk_list_store_append(store,&iter);
gtk_list_store_set(store,&iter,0,"2nd list item",-1);

gtk_combo_box_set_model(GTK_COMBO_BOX(my_combo_box), GTK_TREE_MODEL(store));
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(my_combo_box), cell, "text",0,NULL);
gtk_combo_box_set_active(GTK_COMBO_BOX(my_combo_box),0);
...