继续写,这篇才是真正的Treeview,于Listview大同小异,呵呵! 与上一篇的Listview一样,Treeview也需要一个Model:
继续写,这篇才是真正的Treeview,于Listview大同小异,呵呵!
与上一篇的Listview一样,Treeview也需要一个Model:
1.创建一个Treeview
GtkWidget *tree = gtk_tree_view_new();
添加表头,如下代码
enum {col_name = 0, n_cols}; // 定义枚举类型,不明白的话参考C语言
// 这里的枚举之定义了一列,当然你可以自己多定义几列
// 其中col_name为列,n_clos为列数,这里自动为1
1 GtkCellRenderer* renderer; // 定义一个Render
2 renderer = gtk_cell_renderer_text_new(); // 创建一个Render
/* 把这一列加到Listview中 */
3 gtk_tree_view_insert_column_with_attributes(
GTK_TREE_VIEW(list), //
-1,
"name", // 显示的内容
renderer, // 上面创建的Render
"text", // 显示的格式
col_name, // 列号
NULL);
这就完成了一列的添加,其实对于Treeview来说一般只有一列,上面的代码可以通用,只要改一下表头就行了。
添加节点,与前一篇的listview一样;
首先,我们需要创建一个GtkTreeModel来存储其数据。
下面是我们自己写的一个函数:
/* 创建model */
GtkTreeModel *createModel()
{
GtkTreeStore *store;
/* 创建model,注意这个函数的参数,第一个为列数,后面一次是列存储数据的类型,我们这里是一列,如果是多列在后面依次增加就行,如:
gtk_tree_store_new(n_cols, G_TYPE_STRING, G_TYPE_STRING);
*/
store = gtk_tree_store_new(n_cols, G_TYPE_STRING); // 注意这里是gtk_tree_store_new不是gtk_list_store_new
return GTK_TREE_MODEL(store);
}
调用函数:
GtkTreeModel *store = createModel();
然后调用gtk_tree_view_set_model函数来绑定model和tree,这是必须的,如下所示:
gtk_tree_view_set_model(GTK_TREE_VIEW(tree), store);
下面的工作就是往model中添加数据了,
GtkTreeIter iter; // 定义元素,GtkTreeIter是一个结构,我理解它是一个节点
gtk_tree_store_append(GTK_TREE_STORE(store), &iter, NULL);
// 把这节点添加到model中,treeview也就会显示出来了
// 注意:与listview不同的是,它多出一个参数,多出来的这个参数就是这个节点的父节点,当它为NULL是,节点就被添加到Root之下,
/* 为节点添加数据 */
gtk_tree_store_set(GTK_TREE_STORE(store),
&iter,
col_name, // 行号