Skip to content

布局管理 ​

布局管理器 ​

在我们之前直接通过界面拖拽设置控件时,都是通过手动控制控件位置的。每个控件的位置需要计算坐标,最终通过 setGeometry 或 move 方法进行摆放。这种方式在界面内容较多时计算复杂,且无法自适应窗口大小的调整(例如窗口缩放时控件位置不会动态更新)。因此,Qt 引入了**布局管理器(Layout)**机制。

常见布局管理器 ​

  1. QVBoxLayout(垂直布局)
  2. QHBoxLayout(水平布局)
  3. QGridLayout(网格布局)
  4. QFormLayout(表单布局)

垂直布局(QVBoxLayout) ​

属性说明
layoutLeftMargin左侧边距
layoutRightMargin右侧边距
layoutTopMargin上方边距
layoutBottomMargin下方边距
layoutSpacing相邻元素之间的间距

水平布局(QHBoxLayout) ​

属性说明
layoutLeftMargin左侧边距
layoutRightMargin右侧边距
layoutTopMargin上方边距
layoutBottomMargin下方边距
layoutSpacing相邻元素之间的间距

网格布局(QGridLayout) ​

QGridLayout 的用法与 QVBoxLayout、QHBoxLayout 相似,但其布局基于行和列。

属性说明
layoutLeftMargin左侧边距
layoutRightMargin右侧边距
layoutTopMargin上方边距
layoutBottomMargin下方边距
layoutHorizontalSpacing相邻元素之间水平方向的间距
layoutVerticalSpacing相邻元素之间垂直方向的间距
layoutRowStretch行方向的拉伸系数
layoutColumnStretch列方向的拉伸系数

特殊设置说明:

  • QGridLayout 提供 setRowStretch() 方法设置行拉伸系数。
  • 若拉伸效果不明显(例如按钮高度固定),需将控件的垂直方向 sizePolicy 属性设置为 QSizePolicy::Expanding(尽可能填充满布局管理器)。

控件尺寸策略(SizePolicy)可选值:

值说明
QSizePolicy::Ignored忽略控件尺寸,不影响布局
QSizePolicy::Minimum控件最小尺寸固定,布局时不会超过该值
QSizePolicy::Maximum控件最大尺寸固定,布局时不会小于该值
QSizePolicy::Preferred控件理想尺寸固定,布局时尽量接近该值
QSizePolicy::Expanding控件尺寸可随空间调整,尽可能占据更多空间
QSizePolicy::Shrinking控件尺寸可随空间调整,尽可能缩小以适应空间

表单布局(QFormLayout) ​

QFormLayout 适用于表单类界面(例如收集用户信息的场景),典型结构包含标签(如“学号”、“姓名”)和对应的输入控件(如文本框)。

应用场景示例:
在学校或社群中收集电话号码的文档,表单包含以下字段:

  1. 学号
  2. 姓名
  3. 电话
    用户填写后可直接提交。

作业 ​

完成 2048 小游戏。

知识如风,常伴吾身