Skip to content

布局管理

布局管理器

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

常见布局管理器

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

垂直布局(QVBoxLayout)

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

水平布局(QHBoxLayout)

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

网格布局(QGridLayout)

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

属性说明
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 小游戏。

知识如风,常伴吾身