GTK Box(hbox&vbox)的expand和fill两个属性的实践理解

1. GtkHBox/GtkVBox的gtk_box_pack_start函数中的expand和fill两个参数的区别:

expand就是当Box给我们的widget分配了额外的空间后,我们的widget会占住这个空间,不会让给别人。
fill就是当expand为TRUE的时候,我们不仅占用Box给我们分配的空间,而且会把自己的界面扩大到这个空间上。

所以,简单来说,expand=TRUE, fill=FALSE就是占住空间但是控件本身大小不变;两个都是TRUE,就是不仅占住空间而且控件也会变得和这个空间一样大;expand=FALSE,fill就没了意义。

2. GtkHBox中只要expand是TRUE,那么,水平方向上一定fill,所以fill参数此时只影响垂直上是否fill;GtkVBox只要expand是TRUE,那么,垂直方向上一定fill,所以fill参数只影响水平上是否fill

3. 使用gtk_widget_set_size_request来改变widget的大小。widget如果变大了,而top-level window没有使用gtk_widget_set_size_request设置固定大小时:如果window此时嫌小了,window自动扩大;如果 window不嫌小,能容下扩大后的widget,则window size不变。如果top-level window使用了gtk_widget_set_size_request设置了固定大小,window嫌小的话,widget会超出边界绘制,覆盖其 他的widget。

使用gtk_widget_set_size_request函数时,width, height设成 -1 表示将widget size设成widget应该有的size(natual size)。所以,一般如果widget size改变了,对于top-level window,都会这样做一下,这样window就自动变成能容纳所有widget的大小。
posted @ 2011-04-05 10:23  super119  阅读(...)  评论(...编辑  收藏