二、GTK-组装盒、表组装

本文详细解析了GTK中的水平盒(HBox)和垂直盒(VBox)创建、控件包装技巧,以及表格布局的用法,包括homogeneous属性、控件扩展与填充、行列配置等。理解这些有助于高效组织UI元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 组装盒

1.1 创建盒

gtk_hbox_new 横向
gtk_vbox_new 纵向

/**
 * homogeneous:是否均匀分配空间
 *        TRUE: 均匀分配空间,盒内所有控件按最大控件的大小分配
 *       FALSE: 建立不同大小的控件,以各自具有的内容分配
 * spacing: 用来确定不同控件之间的间隙(注意是控件之间的间隙)
 *          **注意区分控件两端和控件之间**
 */
GtkWidget * gtk_hbox_new  (gboolean homogeneous,
                           gint     spacing);

  注意看下面图片spacing = 20和padding = 10,可扩展可填充控件之间间隙的相同的,这是因为两个控件都会有padding,因此10 + 10 = 20。但是padding=10控件的两端都会10。然而spacing = 20只是控件之间。
请添加图片描述

1.2 盒子中放置控件

gtk_box_pack_start 从盒子最前面开始放控件
gtk_box_pack_end 从盒子最后开始放控件

/**
 * expand:控制控件是否随着box拉长,控件是否也拉长
 * fill:  只有expand是TRUE的情况下,此变量才其作用
 *   TRUE:控件随着box拉长后,是否填充空白区域
 *  FALSE:控件随着box拉长后,不填充空白区域
 * padding:控件两端的间隙(像素)
 */
void  gtk_box_pack_start          (GtkBox         *box,
                                   GtkWidget      *child,
                                   gboolean        expand,
                                   gboolean        fill,
                                   guint           padding);

fill只有expand = TRUE时候才起作用
请添加图片描述

2 表组装

columns = 2, rows = 2

 0          1          2
0+----------+----------+
 |          |          |
1+----------+----------+
 |          |          |
2+----------+----------+
/**
 * rows:列
 * columns: 行
 * homogeneous:决定表格如何定大小
 *         TRUE:平均分配大小,每个表格大小按最大控件的大小
 *        FALSE:则大小为,“高”为列中最高的物件,及“宽”为栏中最宽的控件大小
 */
GtkWidget* gtk_table_new	(guint		rows,
				             guint		columns,
				             gboolean	homogeneous);
/**
 * left_attach、right_attach:x轴开始和结束坐标
 * top_attach、bottom_attach:y轴开始和结束坐标
 * xoptions、yoptions:指定x和y方向控件的是否扩展、填充属性
 *               GTK_FILL:如果table大于控件尺寸,该控件会扩展成使用所有可用空间
 *               GTK_EXPAND:如果table拉伸,控件是否跟着拉伸
 * xpadding、xpadding:控件之间间隙
 */
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);

控件1(1, 2, 0,1) 控件2(1, 2, 1, 2)
如果控件1仅指定x方向FILL、控件2仅指定x方向EXPAND,但是由于控件2在x方向扩展,也会造成其他控件相同x方向扩展
请添加图片描述

参考1:GTK封装物件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值