怎样构建树视图?

269阅读 0评论2008-10-15 lQR2h3N
分类:

要想创建树,需要GtkTreeModel和GtkTreeView一起配合起来工作.



用于显示数据的视图:
GtkTreeView: 代表整个树视图.
    pTreeView = gtk_tree_view_new ().
    gtk_tree_view_set_model(GTK_TREE_VIEW(pTreeView), (GtkTreeModel*)pTreeStore);

GtkTreeViewColumn: 代表树视图中的一列.
    GtkTreeViewColumn *col = gtk_tree_view_column_new();
    gtk_tree_view_append_column(GTK_TREE_VIEW(pTreeView), col);
    
GtkCellRenderer: 代表一列中的一个单元.(比如说算一个单元,check box算一个单元, 文本名字算一个单元)
    GtkCellRenderer *cell_img = gtk_cell_renderer_pixbuf_new();    //CELL 1存储图片
    gtk_tree_view_column_set_attributes(col, cell_img, "pixbuf", COL_PIX1, NULL);
    gtk_tree_view_column_pack_start(col, cell_img, FALSE);   
    GtkCellRenderer *renderer = gtk_cell_renderer_text_new();    //CELL 2存储文本
    gtk_tree_view_column_set_attributes (col , renderer, "text", COL_NAME, NULL);
    gtk_tree_view_column_pack_start(col, renderer, TRUE);


enum
{
    COL_PIX1,
    COL_NAME,
    TOTAL_NUM
};


用于存储数据的model:
GtkTreeModel: 用于存储数据.   
    比如说 pTreeStore = gtk_tree_store_new( TOTAL_NUM, GDK_TYPE_PIXBUF, G_TYPE_STRING);
    表示模型中共存储2组数据.(图片,文本)


所以它是基于MVC模型的.一个数据Model可以用多个View来显示.

GtkTreeIter:用于存储model中数据的层次关系.(父亲,兄弟关系等)
    gtk_tree_store_append(m_pTreeStore, &pCurIter, pParentIter); //父子关系.同父者为兄弟.
    gtk_tree_store_set(m_pTreeStore, &iter, COL_PIX1, pPix1, COL_NAME, "hello word", -1);
        //表示该层中有图片,文本(pPix1,是指向pixbuf的指针.)

用于选择数据:
GtkTreeSelection用于选择,(比如一次选择一整行,还是一个cell).
    GtkTreeSelection *select = gtk_tree_view_get_selection (GTK_TREE_VIEW (pTreeView));
    gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
    g_signal_connect (G_OBJECT (select), "changed",G_CALLBACK (TreeSelectOperate), this);


--------------------next---------------------

上一篇:shell中引号的区别
下一篇:gtk ui子编程常见问题总结(一)