GTK 學習筆記2 布局管理

2021-07-22 15:34:15 字數 3794 閱讀 1677

gtk+中用於管理各種構件布局的是一類特殊的構件,稱作布局容器(

layout containers),這類構件不可見,並且有很多種,常用的有以下幾種:

gtkhbox:水平組裝盒

gtkvbox:垂直組裝盒

gtktable:表組裝

gtkalignment:可以控制子構件的對其方式和大小

gtkhbox和gtkvbox

gtkhbox可以將它的子構件橫向排列,gtkvbox可以將它的子構件縱向排列。建立構件盒的函式如下:

[cpp]view plain

copy

gtkwidget *   gtk_vbox_new (gboolean homogeneous,    gint spacing);  

gtkwidget *   gtk_hbox_new (gboolean homogeneous,    gint spacing);  

homogeneous是乙個布林值,為true時,強制盒中的構件都占用相同大小的空間,不管每個空間的大小。

spacing是以畫素為單位設定的構件之間的間距。

建好組裝盒後,用如下函式向盒中新增構件:

[cpp]view plain

copy

void

gtk_box_pack_start (gtkbox *box,  gtkwidget  *child,   gboolean  expand,  gboolean  fill,  guint   padding);  

void

gtk_box_pack_end (gtkbox *box,  gtkwidget  *child,   gboolean  expand,   gboolean  fill,   guint  padding);  

兩個函式的用法可以參考api手冊。

下面用這兩個構件設計乙個如下樣式的視窗:

**如下:

[cpp]view plain

copy

#include 

void

intmain(

intargc,

char

*argv)    

效果如下:

gtktable

表組裝構件可以建立乙個**,構件可以填滿我們指定的單元格,乙個構件可以占用乙個單元格,也可以占用多個。和其他構件類似,建立表需要用到下面的函式:

[cpp]view plain

copy

gtkwidget  *gtk_table_new( guint  rows,   guint  columns,   gboolean  homogeneous );  

rows是表的行數,columns是表的列數,

homogeneous確定了表內單元格的大小的處理方式,如果為true,所有單元格的大小都將調整為表內最大構件的大小,如果為false,單元格的大小將根據同行內最高的構件和同列中最寬的構件來確定。

行與列為從0到n編號,n是呼叫 gtk_table_new 時所指定的值。所以,如果你指定rows = 2及columns = 2, 布局圖會看起來像這樣:

建立表後,用如下函式向表內新增構件:

[cpp]view plain

copy

void

gtk_table_attach( gtktable         *table,  

gtkwidget        *child,  

guint            left_attach,  

guint            right_attach,  

guint            top_attach,  

guint            bottom_attach,  

gtkattachoptions xoptions,  

gtkattachoptions yoptions,  

guint            xpadding,  

guint            ypadding );  

table是你已經建立的表,child是你想放進表裡的構件。

left_attach和right_attach引數指定構件放置的位置,並使用多少單元格來放。如果你想在2x2的表中的右下單元格處放入乙個按鈕,並且想讓它只填充

這個單元格,則left_attach應該為 = 1, right_attach = 2, top_attach = 1, bottom_attach = 2。

xoptions及yoptions是用來指定組裝時的選項,可以通過使用「位或」運算以允許多重選項。這些選項是:

gtk_fill:如果錶框大於構件,同時gtk_fill被指定,該構件會擴充套件開以使用所有可用的空間。

gtk_shrink:如果表構件分配到的空間比需求的小(通常是使用者在改變視窗大小的時候),那麼構件將會推到視窗的底部以外的區域,無法看見。如果gtk_shrink被指定了,構件將和表一起縮小。

gtk_expand:這會導致表擴充套件以用完視窗中所有的保留空間。

padding會在構件的周圍產生乙個指定象素的空白區域。

下面的**將繪製乙個2*2的**,並新增兩個按鈕:

[cpp]view plain

copy

#include 

void

intmain(

intargc,

char

*argv)    

效果如下:

gtkalignment

這個構件可以用比例的方式設定它的子構件的顯示位置和占用空間,用如下函式新建乙個alignment構件:

[cpp]view plain

copy

gtkwidget* gtk_alignment_new( gfloat xalign,  

gfloat yalign,  

gfloat xscale,  

gfloat yscale );  

四個引數都是介於0.0與1.0間的浮點數。

xalign和yalign是子構件的位置,左上角為0,右下角為1。

xscale和yscale是子構件在橫豎兩個方向上占用空間的比例,0為子構件的實際大小,1為全部占用。

用下面的函式將子構件新增到alignment構件中,每個alignment構件只能新增乙個子構件:

[cpp]view plain

copy

gtk_container_add (gtk_container (alignment), child_widget);  

下面是乙個例子:

[cpp]view plain

copy

#include 

void

intmain(

intargc,

char

*argv)    

不同的引數會產生不同的效果:

gtk_alignment_new(0.5,0.5,0,0);

gtk_alignment_new(0,0,0,0);

gtk_alignment_new(1,1,0,0);

gtk_alignment_new(1,1,1,1);

gtk_alignment_new(0.5,0.5,0.5,1);

GTK 學習筆記2 布局管理

gtk 中用於管理各種構件布局的是一類特殊的構件,稱作布局容器 layout containers 這類構件不可見,並且有很多種,常用的有以下幾種 gtkhbox 水平組裝盒 gtkvbox 垂直組裝盒 gtktable 表組裝 gtkalignment 可以控制子構件的對其方式和大小 gtkhbo...

GTK 布局管理

gtk 中用於管理各種構件布局的是一類特殊的構件,稱作布局容器 layout containers 這類構件不可見,並且有很多種,常用的有以下幾種 gtkhbox 水平組裝盒 gtkvbox 垂直組裝盒 gtktable 表組裝 gtkalignment 可以控制子構件的對其方式和大小 gtkhbo...

GTK 布局管理

這一小結,將要學習將構建布局在視窗和對話方塊中.為了方便的管理我們的構件,在gtk 中,通常使用不可見的構件稱作layout containers.這一小節將要討論gtkalignment,gtkfixed,gtkvbox,gtktable.一 gtkfixed 容器構建gtkfixed用於布置子構...