學習水準和垂直布局容器後,我們幾乎能布出任何風格的布局,隻需要嵌套使用水準布局容器和垂直布局容器即可。假如我們要完成下圖的布局,我們該怎麼做呢?
1)建立一個垂直布局容器( A )
2)建立一個水準布局容器( B ),一個close按鈕( C )
3)将水準布局容器和close按鈕添加到垂直布局容器裡( 将 B 和 C 添加到 A )
4)建立button 1按鈕( D ) 和 button 2按鈕( E )
5)再将button 1按鈕 和 button 2按鈕添加到水準布局容器裡( 将 D 和 E 添加到 B )
這樣是可以完成上圖的布局,但是,假如布局裡有有很多控件,我們隻是通過水準和垂直容器嵌套布局會很麻煩,而且,控件越多,布局越麻煩。有沒有更簡單的方法呢?有,就是我們馬上要學習的表格布局,具體的操作流程和水準垂直布局一樣。
1)建立主視窗
2)建立布局容器
3)布局容器添加到視窗裡
4)建立所需控件
5)控件添加到布局容器裡
6)顯示所有控件
表格布局容器的建立:
GtkWidget *gtk_table_new(
guint rows,
guint columns,
gboolean homogeneous );
rows: 行數
coumns: 列數
homogeneous:容器内表格的大小是否相等
傳回值:表格布局容器指針
布局容器添加控件:
void gtk_table_attach_defaults(
GtkTable *table,
GtkWidget *widget,
guint left_attach,
guint right_attach,
guint top_attach,
guint bottom_attach );
table: 容納控件的容器
widget: 要添加的控件
後四個參數為控件擺放的坐标,規則如下:
完整代碼如下:
#include <gtk/gtk.h> // 頭檔案
int main(int argc, char *argv[])
{
gtk_init(&argc, &argv); // 初始化
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // 建立視窗
GtkWidget *table = gtk_table_new(2, 2, TRUE); // 表格布局,2行2列
gtk_container_add(GTK_CONTAINER(window), table); // 容器加入視窗
// button 1
GtkWidget *button = gtk_button_new_with_label("buttton 1");
gtk_table_attach_defaults(GTK_TABLE(table), button, 0, 1, 0, 1);// 把按鈕加入布局
// button 2
button = gtk_button_new_with_label("button 2");
gtk_table_attach_defaults(GTK_TABLE(table), button, 1, 2, 0, 1);
// close button
button = gtk_button_new_with_label("close");
gtk_table_attach_defaults(GTK_TABLE(table), button, 0, 2, 1, 2);
gtk_widget_show_all(window); // 顯示視窗控件
gtk_main(); // 主事件循環
return 0;
}