GtkCombobox学习笔记
今天做东西时用到了一点GtkCombobox一点稍微复杂的功能,以前一直使用的简单text形式(下文有在DEVHELP中的原文)实现不了,然后就研究了下GtkTreeStore和 GtkCombobox联合使用的情况.
主要借鉴了帮助文档和此网址的内容:
http://blog.csdn.net/caterpillar_here/article/details/2632833
下面是简单情况
Inaddition to the model-view API,GtkComboBoxoffersa simple API which is suitable for text-only combo boxes, and hidesthe complexity of managing the data in a model. It consists of thefunctions
gtk_combo_box_new_text()
,
gtk_combo_box_append_text()
,
gtk_combo_box_insert_text()
,
gtk_combo_box_prepend_text()
,
gtk_combo_box_remove_text()
gtk_combo_box_get_active_text()
.
下面介绍GtkTreeStore和GtkCombobox联合使用的情况
这里使用了Model-View模式,特殊的地方是,他使用combobox来替代了treeview的功能.
这里只说明完整功能最少模块.
第一部分:GtkTreeStore 部分
GtkTreeStore*combobox_treestore;
combobox_treestore= gtk_tree_store_new (1,G_TYPE_STRING);
第二部分:显示部分GtkCombobox
GtkWidget*combobox_office;
GtkCellRenderer* renderer;
combobox_office=gtk_combo_box_new_with_model(GTK_TREE_MODEL(combobox_treestore));
renderer= gtk_cell_renderer_text_new();
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox_office),renderer,FALSE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT(combobox_office),renderer,"text",0,NULL);
/*上面这三行,就对应了GtkTreeView里面对应的以下内容
cell_renderer = gtk_cell_renderer_text_new ();
column =
gtk_tree_view_column_new_with_attributes("性别",cell_renderer,"text",COLUMN_PERSON_SEX,NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW (treeview),column);
*/
第三部分:和TreeView使用方式一样
gtk_tree_store_append (GTK_TREE_STORE(combobox_treestore),&iter,NULL);
gtk_tree_store_set (GTK_TREE_STORE(combobox_treestore),&iter, 0,row[0],-1);
第四部分:获取当前选定的条目
GtkTreeModel * combobox_treemodel;
combobox_treemodel = gtk_combo_box_get_model(combobox_office);
gtk_combo_box_get_active_iter(combobox_office, &iter);
gtk_tree_model_get(combobox_treemodel, &iter,0, &office_name,-1);
就用到这三个函数,具体参数意义去看devhelp
如此这般,就可以正常使用GtkCombobox了
PS:我是使用了TreeView后又使用的这个,所以是比较和TreeView来看的.