一、核心概念
- 作用:控制布局内控件/子布局的空间分配比例,数值越大,分配到的空间越多
- 适用布局:
QHBoxLayout(水平)、QVBoxLayout(垂直)、QGridLayout。
a. 注意表单布局QFormLayout两列结构是固定死的,不适合也不能自由设置拉伸比例。 - 默认值:所有控件拉伸因子默认为
0,空间平均分配
二、3种标准设置方法
方法1:UI设计师可视化设置
- 选中布局 → 右侧属性栏找到
layoutStretch - 直接填写逗号分隔的比例值(对应布局内元素顺序)
- 示例:
1,2,97→ 第1个:1、第2个:2、第3个:97
- 示例:
- 无需写代码,自动生效
方法2:代码按索引设置
函数原型
void QBoxLayout::setStretch(int index, int stretch);
规则
index:布局内元素索引,从0开始stretch:拉伸因子(正整数,越大空间越多)
示例(也是按照上述 UI 的 1,2,97 举例,程序运行后同等效果)
// 获取布局(推荐直接用内容部件)
auto layout = qobject_cast<QHBoxLayout*>(ui->scrollAreaWidgetContents->layout());
// 按索引设置
layout->setStretch(0, 1); // 第1个元素:拉伸1
layout->setStretch(1, 2); // 第2个元素:拉伸2
layout->setStretch(2, 97); // 第3个元素:拉伸97
方法3:指定控件设置
函数原型
bool QBoxLayout::setStretchFactor(QWidget *widget, int stretch);
示例
auto layout = m_pClimbPumpCtrlUi->scrollAreaWidgetContents->layout();
// 直接给控件设置拉伸
layout->setStretchFactor(ui->widgetLeft, 1); // 左边
layout->setStretchFactor(ui->widgetMid, 2); // 中间
layout->setStretchFactor(ui->widgetRight, 97); // 右边
方法4:添加控件时直接设置
添加控件/布局时,第二个参数就是拉伸因子:
// 水平布局添加控件,直接指定拉伸因子
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(控件1, 1); // 拉伸1
layout->addWidget(控件2, 2); // 拉伸2
layout->addWidget(控件3, 97); // 拉伸97
三、网格布局(QGridLayout)拉伸设置
网格布局需要单独设置行/列拉伸:
// 设置第0列拉伸因子为1
ui->gridLayout->setColumnStretch(0, 1);
// 设置第1列拉伸因子为9
ui->gridLayout->setColumnStretch(1, 9);
// 行拉伸(垂直方向)
ui->gridLayout->setRowStretch(0, 1);
四、坑
-
索引必须连续且唯一
- 错误:
setStretch(0,1); setStretch(0,2);(覆盖同一个元素,导致空间错乱) - 正确:
setStretch(0,1); setStretch(1,2);
- 错误:
-
拉伸因子 = 空间比例
- 比例
0,1,9→ 第1个控件几乎不占空间,第3个占绝大部分
- 比例
-
配合尺寸策略生效
控件默认策略会影响拉伸,锁定大小用:
控件->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
&spm=1001.2101.3001.5002&articleId=160900718&d=1&t=3&u=ff3364de21ab4e258c1439d612975862)
1346

被折叠的 条评论
为什么被折叠?



