gtk下拉列表控件ComboBox的使用

⌚Time: 2022-11-20 03:44:42

👨‍💻Author: Jack Ge

GtkComboBox采用了模型-视图的模式实现,如果只是需要简单的包含字符的列表框,可以使用GtkComboBoxText控件

代码


#include <gtk/gtk.h>

int main() {

    

    gtk_init(NULL, NULL);

    GtkWidget *window;

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    gtk_window_set_default_size(GTK_WINDOW(window), 200, 100);

    gtk_window_set_title(GTK_WINDOW(window), "demo");



    //新建liststore,1列,G_TYPE_STRING类型

    GtkListStore *listStore = gtk_list_store_new(1,G_TYPE_STRING);

    GtkTreeIter iter;

    //liststore新建项

    gtk_list_store_append(listStore,&iter);

    //设置第0列数据

    gtk_list_store_set(listStore,&iter,0,"选择1",-1);

    //新建项

    gtk_list_store_append(listStore,&iter);

    //设置第0列数据

    gtk_list_store_set(listStore,&iter,0,"选择2",-1);

    //新建项

    gtk_list_store_append(listStore,&iter);

    //设置第0列数据

    gtk_list_store_set(listStore,&iter,0,"选择3",-1);

    //GtkComboBox

    GtkWidget *comboBox = gtk_combo_box_new_with_model(GTK_TREE_MODEL(listStore));

    //GtkCellRenderer

    GtkCellRenderer *renderer = gtk_cell_renderer_text_new();

    //将GtkCellRenderer加入comboBox

    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(comboBox),renderer,TRUE);

    //设置renderer text属性与第0列关联

    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(comboBox),renderer,"text",0,NULL);



    //加入容器

    gtk_container_add(GTK_CONTAINER(window),comboBox);

    //显示所有控件

    gtk_widget_show_all(window);

    //关联回调函数

    g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

    gtk_main();

}






结果