伸展因子
最后更新于:2022-04-02 02:12:02
[TOC]
## 概述
![](https://qtguide.ustclug.org/images/ch06/ch06-05-01.png)
### 设计器修改
修改控件
举例:以三个按钮控件为例
1. 如果它们的伸展因子都是 0,那么三个按钮在水平布局里就是均匀拉伸
2. "One" 按钮的 "水平伸展" 设为 1,"Two" 按钮的 "水平伸展" 设为 2,"Three" 按钮的 "水平伸展" 设为 3,该行三个按钮的伸展因子之和为 1+2+3 == 6,新的空间就按照 1/6 ,2/6 ,3/6 的比例划分给这三个按钮
3. 如果把 "One" 按钮的 "水平伸展" 设为 2,"Two" 按钮的 "水平伸展" 设为 4,"Three" 按钮的 "水平伸展" 设为 0,那么在窗口拉大时,分配规律就是:先计算伸展因子之和 2+4+0 == 6,新的空间按照 2/6 ,4/6,0/6 的比例划分给这三个按钮
修改布局
通过修改布局的`layoutStretch`
![](https://qtguide.ustclug.org/images/ch06/ch06-05-06.png)
### 代码修改
1. 直接修改控件的伸展因子(不推荐直接修改控件)
```
//获取旧的尺寸策略作为底板,修改需要变动的伸展因子
QSizePolicy sp = ui->pushButton1->sizePolicy();
sp.setHorizontalStretch(2); //水平伸展因子
sp.setVerticalStretch(0); //垂直伸展因子
//把新策略设置给按钮1
ui->pushButton1->setSizePolicy(sp);
```
2. 修改布局的伸展因子(推荐)
```
void setStretch(int index, int stretch)
bool setStretchFactor(QWidget * widget, int stretch)
bool setStretchFactor(QLayout * layout, int stretch)
```
';