gtk中的treeview构件的使用【0816】

 

GTKtreeview的学习

       其实接触gtk也没多久,只是把学到的做一总结,也算是备忘吧,以后真要忘了的话【几乎是铁定的了】,翻着看看,还能想起来。

       感觉treeview控件对于gtk的入门来说应该算比较高级的构件了,而且学习它的同时也可以学习下gtk+是如何实现MVC架构的。

       说起MVC,现在应该还算比较流行的了。其实也就是model-view-controller,就其本身而言,其实好像也没多大新意。Gtk+对其的实现不是很标准,但应该说有些东西还是套用的,因为本身差别并不大。

       treeview的使用为例,

       首先我们定义model

GtkTreeModel  *list_model_create()
{  
  GtkListStore 
*store;
  store 
= gtk_list_store_new(3,G_TYPE_STRING, G_TYPE_STRING,G_TYPE_STRING);
  
return GTK_TREE_MODEL(store);
}

 

 当然这里面先不加载具体的数据。Gtk中用于treeviewmodel一般可以用liststoretreestore来实现。

 然后,将viewmodel关联起来

 

Code
 

看起来比较复杂,其实还是比较简单的

首先view要通过column来展现,而column中的内容,则有store来提供,当然store并不管里面具体是什么东西,所以,就需要cellrenderer来描述。而具体的数据可能又有很多行(row),每一行怎么区别呢,就要用到iter

当然上面的实现还是复杂了些,因为每个列有两个cellrenderer(一个用来描述图标,另一个用来描述文字),如果每一个列(column)只有一种属性,或是文本,或是图片,那就可以用更方便的使用如下函数。

column = gtk_tree_view_column_new_with_attributes("column 1",renderer_icon, "stock-id"0, NULL);
gtk_list_view_append_column(GTK_TREE_VIEW(list), column);

这样就简单多了。

至此我们就建立了modelview,当然具体的数据还没有添加。

在添加具体数据之前,先看看在main函数中应如何调用

GtkWidget *list;
list
= gtk_tree_view_new_with_model(list_model_create());
list_view_ini(list);

 

下面要往里面填数据了,

 

Code

 

我们定义了一个插入用的函数,传入的后三个参数iconstrcol分别表示图标,文自信息和文字信息对应的颜色,图标对应的cellrendererpixbuf型的,而文字信息及其颜色是一个textcellrenderer的两个属性,前面通过pack打包到一个column里面了。

main函数中,只需简单的插入数据就行了,例如

list_append(list,GTK_STOCK_CLOSE,"hello","grey");
list_append(list,GTK_STOCK_CLOSE,
"world","grey");


treeview已经构建完成了,但这似乎没有什么用啊,要真正有用还需要知道如何获取选择信息,

当然首先要做一信号的链接
model=gtk_tree_view_get_model(GTK_TREE_VIEW(list));
g_signal_connect(selection, 
"changed", G_CALLBACK(on_changed), model);

这里将model传入是为了实现一个简单的图标变化。
当然还需额外说明的是菜单的选择还需要使用到一个名为selection的构件,它是专门用来描述treeview的选择项的

GtkTreeSelection *selection; 
selection 
= gtk_tree_view_get_selection(GTK_TREE_VIEW(list));

选择项若有所改变其相应的回调函式如下,

 

Code


这里面的方法还是比较麻烦的逐一判断的那种,这主要是为了能够实现对图标的选择性修改,当然一般来说如果只需要获取选择信息可以用一种很简单的方式。

 

Code


 

这里要注意获取的value实则指向了一块新分配在自由存储区的内存,用完要及时释放掉。

 

至此,就完成了的一个简单的treeview小程序。

下面贴出完整的代码,

Code
















posted @ 2009-08-16 22:05  平繁  阅读(4269)  评论(1编辑  收藏  举报