六、GTK 如何使用Treeview(一)

 
本来打算写一下布局问题的,但是布局比较简单,自己多实验几次就差不多了。改写TreeView的学习心得了。

    在Gtk中,Treeview和Listview(暂时只发现其列表的功能,可能Listview另有其控件,这里暂时使用Listview的名字)使用 的是同一个函数gtk_tree_view_new即可;但是他跟按钮菜单等控件的区别很大,因为他还要包括节点(tree)或行(list)。下面分别 来说明一下,
    1.先从简单的入手吧ListView
    创建一个Listview非常简单
    GtkWidget *list = gtk_tree_view_new();
    对于Grid类型的Listview来说,一般都有表头,如下代码
    enum {col_name = 0, n_cols};   // 定义枚举类型,不明白的话参考C语言
    // 这里的枚举之定义了一列,当然你可以自己多定义几列
    // 其中col_name为列,n_clos为列数,这里自动为1
    // 定义enum {col_name = 0, col_age, n_cols}; 这就是定义2列,以此类推
    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);
    这就完成了一列的添加,当然,添加多列重复2.3步即可,注意:参数变化,我想大家都能看出来吧?
    该添加数据了,这也是GtkTreeview比较难理解的地方,也比较繁琐;
    首先,我们必须了解的是一个GtkTreeview要有一个GtkTreeModel来存储其数据,并且GtkTreeview能够显示 GtkTreeModel中存储的数据,这样我们只要改变GtkTreeModel中的数据GtkTreeview显示的内容也会发生变化,这样理解起来 应该不难吧?现在我们来实践一下吧。
    对于GtkTreeview它本身并没有GtkTreeModel,所以我们要创建GtkTreeModel,下面是我们自己写的一个函数:
/*  创建model */
GtkTreeModel *createModel()
{
    GtkListStore *store;
    /* 创建model,注意这个函数的参数,第一个为列数,后面一次是列存储数据的类型,我们这里是一列,如果是多列在后面依次增加就行,如:
    gtk_list_store_new(n_cols, G_TYPE_STRING, G_TYPE_STRING);
     */
    store = gtk_list_store_new(n_cols, G_TYPE_STRING);
    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_list_store_append(GTK_TREE_STORE(store), &iter);
    // 把这一行添加到model中,listview也就会显示出来了
    /* 为这一行添加数据 */
    gtk_list_store_set(GTK_TREE_STORE(store),
                       &iter,
                       col_name,    //  行号
         

转载于:https://www.cnblogs.com/dotjava/articles/1264860.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值