布局管理
布局管理器
在我们之前直接通过界面拖拽设置控件时,都是通过手动控制控件位置的。每个控件的位置需要计算坐标,最终通过 setGeometry 或 move 方法进行摆放。这种方式在界面内容较多时计算复杂,且无法自适应窗口大小的调整(例如窗口缩放时控件位置不会动态更新)。因此,Qt 引入了**布局管理器(Layout)**机制。
常见布局管理器
- QVBoxLayout(垂直布局)
- QHBoxLayout(水平布局)
- QGridLayout(网格布局)
- 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 适用于表单类界面(例如收集用户信息的场景),典型结构包含标签(如“学号”、“姓名”)和对应的输入控件(如文本框)。
应用场景示例:
在学校或社群中收集电话号码的文档,表单包含以下字段:
- 学号
- 姓名
- 电话
用户填写后可直接提交。
作业
完成 2048 小游戏。
