GTK数据列表显示使用的是MVC (Model View Controller) 设计框架。也就是说数据和显示方式是进行了一种分离的操作。
GtkListStore 储存要显示的数据,而GtkTreeView将数据进行显示
g_type类型
(1) #define G_TYPE_INTERFACE G_TYPE_MAKE_FUNDAMENTAL
(2) #define G_TYPE_CHAR G_TYPE_MAKE_FUNDAMENTAL
(3) #define G_TYPE_UCHAR G_TYPE_MAKE_FUNDAMENTAL
(4) #define G_TYPE_BOOLEAN G_TYPE_MAKE_FUNDAMENTAL
(5) #define G_TYPE_INT G_TYPE_MAKE_FUNDAMENTAL
(6) #define G_TYPE_UINT G_TYPE_MAKE_FUNDAMENTAL
(7) #define G_TYPE_LONG G_TYPE_MAKE_FUNDAMENTAL
(8) #define G_TYPE_ULONG G_TYPE_MAKE_FUNDAMENTAL
(9) #define G_TYPE_INT64 G_TYPE_MAKE_FUNDAMENTAL
(10) #define G_TYPE_UINT64 G_TYPE_MAKE_FUNDAMENTAL
(11) #define G_TYPE_ENUM G_TYPE_MAKE_FUNDAMENTAL
(12) #define G_TYPE_FLAGS G_TYPE_MAKE_FUNDAMENTAL
(13) #define G_TYPE_FLOAT G_TYPE_MAKE_FUNDAMENTAL
(14) #define G_TYPE_DOUBLE G_TYPE_MAKE_FUNDAMENTAL
(15) #define G_TYPE_STRING G_TYPE_MAKE_FUNDAMENTAL
(16) #define G_TYPE_POINTER G_TYPE_MAKE_FUNDAMENTAL
(17) #define G_TYPE_BOXED G_TYPE_MAKE_FUNDAMENTAL
(18) #define G_TYPE_PARAM G_TYPE_MAKE_FUNDAMENTAL
(19) #define G_TYPE_OBJECT G_TYPE_MAKE_FUNDAMENTAL
代码
#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, 300);
gtk_window_set_title(GTK_WINDOW(window), "view");
//枚举列名称
enum {COLUMN_NAME,COLUMN_AGE,COLUMN_NUMBER};
//新建liststore,列类型只支持G_TYPE类型
GtkListStore *listStore = gtk_list_store_new(COLUMN_NUMBER,G_TYPE_STRING,G_TYPE_INT);
GtkTreeIter iter;
//liststore新建项
gtk_list_store_append(listStore,&iter);
//设置项
gtk_list_store_set(listStore,&iter,COLUMN_NAME,"李强",COLUMN_AGE,23,-1);
//新建项
gtk_list_store_append(listStore,&iter);
//设置项
gtk_list_store_set(listStore,&iter,COLUMN_NAME,"刘伟",COLUMN_AGE,33,-1);
//新建项
gtk_list_store_append(listStore,&iter);
//设置项
gtk_list_store_set(listStore,&iter,COLUMN_NAME,"王芳",COLUMN_AGE,44,-1);
//新建项
gtk_list_store_append(listStore,&iter);
//设置项
gtk_list_store_set(listStore,&iter,COLUMN_NAME,"张敏",COLUMN_AGE,34,-1);
//gtktreeview
GtkWidget *treeView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(listStore));
//gtktreeview添加列
GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
//GtkCellRendererText的属性text关联liststore中的COLUMN_NAME列
GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes("姓名",renderer,"text",COLUMN_NAME,NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeView),column);
//添加列
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes("年龄",renderer,"text",COLUMN_AGE,NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeView),column);
//设置网格
gtk_tree_view_set_grid_lines(GTK_TREE_VIEW(treeView),GTK_TREE_VIEW_GRID_LINES_BOTH);
//建立滚动窗口
GtkWidget *scrolledWindow = gtk_scrolled_window_new(NULL,NULL);
//设置滚动条出现方式
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow),GTK_POLICY_AUTOMATIC,GTK_POLICY_ALWAYS);
//加入容器
gtk_container_add(GTK_CONTAINER(window),scrolledWindow);
gtk_container_add(GTK_CONTAINER(scrolledWindow),treeView);
//显示所有控件
gtk_widget_show_all(window);
//关联回调函数
g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);
gtk_main();
}
结果
