GTK+2.0-----树构件.doc

上传人:壹****1 文档编号:544630020 上传时间:2023-07-18 格式:DOC 页数:9 大小:69.01KB
返回 下载 相关 举报
GTK+2.0-----树构件.doc_第1页
第1页 / 共9页
GTK+2.0-----树构件.doc_第2页
第2页 / 共9页
GTK+2.0-----树构件.doc_第3页
第3页 / 共9页
GTK+2.0-----树构件.doc_第4页
第4页 / 共9页
GTK+2.0-----树构件.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《GTK+2.0-----树构件.doc》由会员分享,可在线阅读,更多相关《GTK+2.0-----树构件.doc(9页珍藏版)》请在金锄头文库上搜索。

1、GTK+2.0-树构件GTK+2.0 2008-12-13 15:05:02 阅读112 评论0 字号:大中小订阅 树构件一般用于显示分层结构的数据。树构件本身是G t k Tr e e I t e m构件类型的垂直容器。树构件本身和分栏列表构件( G t k C L i s t)差别并不大:它们都是由容器构件派生而来的,其中与容器相关的函数在树构件和分栏列表构件中同样起作用。差别在于树构件可以嵌套另外的树构件。下面简要介绍怎么使用树构件。 树构件有自己的X窗口,缺省情况下是白色的背景。还有,绝大多数树的函数与分栏列表的函数工作方法是一样的。然而,树构件并不是从分栏列表构件派生而来的,因此,这

2、些函数不可以互换。创建新树构件用下面函数创建树构件:GtkWidget *gtk_tree_new( void ); 像分栏列表构件一样,当项目添加到树构件时,或当子树扩展时,树构件会自动扩展。因为这个原因,所以需要将树构件组装到一个滚动窗口构件中。滚动窗口构件的缺省尺寸是很小的,因此一般对滚动窗口要用g t k _ w i d g e t _ s e t _ u s i z e ( )函数设置它的缺省尺寸,以保证树构件足够大,可以看到其中的项目。 有了树构件后,就可以向其中添加项目了。现在,我们先介绍怎样创建树项构件:GtkWidget *gtk_tree_item_new_with_lab

3、el( gchar *label );现在可以用下面的函数将树项构件添加到树构件中了:void gtk_tree_append( GtkTree *tree,GtkWidget *tree_item );void gtk_tree_prepend( GtkTree *tree,GtkWidget *tree_item );注意,必须一次将全部树项添加到树构件中。没有与g t k _ l i s t _ * _ i t e m s ( )等价的函数。添加一个子树子树与树构件的创建方法类似。子树要加到一个树构件的树项下面,使用以下函数:void gtk_tree_item_set_subtree(

4、 GtkTreeItem *tree_item,GtkWidget *subtree );在子树添加到一个树项之前或之后都不需要对子树调用g t k _ w i d g e t _ s h o w ( )函数。然而,在调用g t k _ t r e e _ i t e m _ s e t _ s u b t r e e ( )之前,必须将树项添加到一棵父树上。这是因为:从技术上来说,子树的父树并不是拥有它的树项构件( G t k Tr e e I t e m),而是树项所在的树。当将子树添加到树项时,一个“”或“”符号会出现在旁边,用户可以点击它“展开”或“折叠”子树也就是显示或隐藏子树。缺省

5、状态树项是折叠起来的。注意,在折叠树项时,所有子树的选中状态仍然保持原有状态,这可能是用户不希望看到的。处理选中的列表与分栏列表构件G t k C L i s t一样,树构件类型也有一个选择域。可以用下面的函数设置选择模式以控制树构件的行为:void gtk_tree_set_selection_mode( GtkTree *tree,GtkSelectionMode mode );与各种选择模式相关的语义在分栏列表构件G t k C L i s t中有详细的介绍。与G t k C L i s t构件一样,当选择列表项或取消选择时,会引发s e l e c t _ c h i l d、u n

6、s e l e c t _ c h i l d、和s e l e c t i o n _ c h a n g e d信号。然而,要使用这些信号,需要知道树构件怎样引发信号,以及如何查找选中的列表项。所有的树构件都有自己的X窗口,它们能够接受事件,例如鼠标点击。然而,要让树构件的选择类型为G T K _ S E L E C T I O N _ S I N G L E和G T K _ S E L E C T I O N _ B R O W S E的树能够正常动作,选中项的列表必须是针对树构件层次上最顶层的(也就是所谓的“根”树)。因而,除非你已经知道它是“根”树,否则,直接访问任意一个树构件的选择

7、状态并不是什么好主意。应该使用GTK_TREE_SELECTION (Tr e e )宏,它将给出一个指向“根”树的选择列表的指针。当然,如果选择模式是G T K _ S E L E C T I O N _ M U LT I P L E(可以多选),这个选择列表也包含了其他不在所涉及到的子树下的树项。最后,整个树都能引发s e l e c t _ c h i l d (理论上还有u n s e l e c t _ c h i l d )信号,但是,只有根树才能引发s e l e c t i o n _ c h a n g e d信号。因而,如果想对一棵树和它的子树的s e l e c t _

8、c h i l d信号进行响应,必须对每一个子树调用g t k _ s i g n a l _ c o n n e c t ( )函数。树构件内部机制Tr e e的结构定义是这个样子:struct _GtkTreeGtkContainer container;GList *children;GtkTree* root_tree; /* owner of selection list */GtkWidget* tree_owner;GList *selection;guint level;guint indent_value;guint current_indent;guint selectio

9、n_mode : 2;guint view_mode : 1;guint view_line : 1; ;前面已经介绍过了直接访问树的选择状态的危险性。树构件定义中的其他部分也可以用宏或者函数访问。GTK_IS_ROOT_TREE (Tr e e )返回一个布尔值,指明一个树是否是“根”树,而GTK_TREE_ROOT_TREE (Tr e e )宏返回指定树的“根”树( G t k Tr e e类型的值)(所以,要记住如果想使用g t k _ w i d g e t _ * ( )类型的函数,要用GTK_WIDGET (Tr e e )宏将对象转换为构件类型)。与其直接访问Tr e e构件的

10、子节点域,不如用G T K _ C O N TAINER (Tr e e )宏将树转换为一个206使第二部分指针,然后将它传递到g t k _ c o n t a i n e r _ c h i l d r e n ( )函数中。这样将为原来的列表创建一个副本。使用完后要用g _ f r e e ( )函数释放它,或用破坏性的方法遍历它。如下所示:children = gtk_container_children (GTK_CONTAINER (tree);while (children) do_something_nice (GTK_TREE_ITEM (children-data);chi

11、ldren = g_list_remove_link (children, children);上面的t r e e _ o w n e r域只在子树中有定义,它指向容纳这个子树的树项构件; l e v e l域指出特定树的嵌套层次,根部树的l e v e l是0,每一个子树比它的双亲树的l e v e l大1。这个域只有在树已在屏幕上绘出后才有设置值。信号void selection_changed( GtkTree *tree );当树构件的选择区域发生变化时,会引发这个信号。也就是当选中树构件的子树或取消选择时。void select_child( GtkTree *tree,GtkWi

12、dget *child );当选中树构件的子树时,将引发这个信号。当调用g t k _ t r e e _ s e l e c t _ i t e m ( ) 和g t k _ t r e e _ s e l e c t _ c h i l d ( )、或当鼠标按钮按下,调用g t k _ t r e e _ i t e m _ t o g g l e ( )和g t k _ i t e m _ t o g g l e ( )函数时,也会引发该信号。当子树被添加到树上或者将子树从树上删除时会间接引发这个信号。void unselect_child (GtkTree *tree,GtkWidge

13、t *child);当树的子树要被取消选中时,引发这个信号。函数和宏guint gtk_tree_get_type( void );返回G t k Tr e e构件的类型标识符GtkWidget* gtk_tree_new( void );创建新树,并返回指向G t k Wi d g e t对象类型的指针。如果创建失败,返回N U L L。void gtk_tree_append( GtkTree *tree,GtkWidget *tree_item );将一个树项添加到树构件的后面。void gtk_tree_prepend( GtkTree *tree,GtkWidget *tree_it

14、em );将一个树项添加到树构件的前面。void gtk_tree_insert( GtkTree *tree,GtkWidget *tree_item,gint position );在树构件中的指定位置插入树项。void gtk_tree_remove_items( GtkTree *tree,GList *items );将一个树项列表(GList *形式的列表)从树构件中删除。注意,从一个树上删除一个树项会解除它和它的子树,以及该子树的子树(如果有的话)的引用。如果只想删除一个树项,可以使用g t k _ c o n t a i n e r _ r e m o v e ( )函数。vo

15、id gtk_tree_clear_items( GtkTree *tree,gint start,gint end );删除树构件中从s t a r t位置到e n d位置的树项。和上一个函数一样,它会解除树项及其子树的引用,因为这个函数只是构造一个列表,然后将列表传递给g t k _ t r e e _ r e m o v e _ i t e m s ( )函数。void gtk_tree_select_item( GtkTree *tree,gint item );对指定i t e m位置的树项引发“ s e l e c t _ i t e m”信号,并选中它(除非在信号处理函数中取消选择)。void gtk_tree_unselect_item( GtkTree *tree,gint item );对指定i t e m位置的树项引发“u n s e l e c t _ i t e m”信号,并取消选择。void gtk_tree_select_child( GtkTree *tree,GtkWidget *tree_item );对子树项引发“s e l e c t _ i t e m”信号,并且选中它。void gtk_tree_unselect_child( GtkTree *tree,GtkWidget *tree_item );让子树项引发“u

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号