【Qt】 设置布局拉伸因子(Stretch)

一、核心概念

  1. 作用:控制布局内控件/子布局的空间分配比例,数值越大,分配到的空间越多
  2. 适用布局QHBoxLayout(水平)、QVBoxLayout(垂直)、QGridLayout
    a. 注意表单布局QFormLayout 两列结构是固定死的,不适合也不能自由设置拉伸比例。
  3. 默认值:所有控件拉伸因子默认为 0,空间平均分配

二、3种标准设置方法

方法1:UI设计师可视化设置

  1. 选中布局 → 右侧属性栏找到 layoutStretch
  2. 直接填写逗号分隔的比例值(对应布局内元素顺序)
    • 示例:1,2,97 → 第1个:1、第2个:2、第3个:97
  3. 无需写代码,自动生效

方法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);

四、坑

  1. 索引必须连续且唯一

    • 错误:setStretch(0,1); setStretch(0,2);(覆盖同一个元素,导致空间错乱)
    • 正确:setStretch(0,1); setStretch(1,2);
  2. 拉伸因子 = 空间比例

    • 比例 0,1,9 → 第1个控件几乎不占空间,第3个占绝大部分
  3. 配合尺寸策略生效
    控件默认策略会影响拉伸,锁定大小用:

   控件->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

油炸自行车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值