伸展策略
最后更新于:2022-04-02 02:12:04
[TOC]
## 伸展策略
实际的布局中,其实伸展因子用的比较少,因为很少有遇到控件必须按照某些比例来拉伸的,实际编程中最常用的是伸展策略
![](https://qtguide.ustclug.org/images/ch06/ch06-05-01.png)
策略的基本标志位
| 枚举标志位 | 数值 | 描述|
| --- | --- |--- |
QSizePolicy::GrowFlag | 1 | 可增长标志,如果有必要的话,可以在建议尺寸之外继续增长。 |
|QSizePolicy::ExpandFlag |2 | 尽量扩展标志,能占多大空间就占多大。|
|QSizePolicy::ShrinkFlag | 4 |可收缩标志,如果有必要的话,可以在缩小到建议尺寸之后继续缩小。 |
| QSizePolicy::IgnoreFlag |8 |忽略建议尺寸,这个增长方式最野蛮,能占多大空间就占多大空间 |
- 建议尺寸就是通过控件的 sizeHint() 函数获取的尺寸,这个尺寸通常由 Qt 类库自己根据要显示的内容计算。建议尺寸是伸展策略的基准
策略的枚举常量
|枚举常量 |数值 |拉伸特点| 描述|
| --- | --- | --- | --- |
| QSizePolicy::Fixed| 0 |固定 |以建议尺寸固定住,对于水平方向是固定宽度,垂直方向是固定高度。|
| QSizePolicy::Minimum | GrowFlag| 被动拉大 |以建议尺寸为最小尺寸,如果有多余的空间就拉伸,没有多余的空间就保持建议尺寸。被动扩张。|
| QSizePolicy::Maximum | ShrinkFlag | 被动缩小 |以建议尺寸为最大尺寸,窗口缩小时,如果其他控件需要,该控件可以尽量缩小为其他控件腾出空间。|
| QSizePolicy::Preferred |GrowFlag, ShrinkFlag |被动伸缩 |以建议尺寸为最佳尺寸,能屈能伸,窗口缩小时可以为其他控件腾出空间,窗口变大时,也可以占据其他控件不需要的空闲空间。基类 QWidget 默认是这种策略。被动扩张。|
| QSizePolicy::Expanding |GrowFlag, ShrinkFlag ,ExpandFlag |主动扩张 |建议尺寸仅仅是明智的建议,但控件基本不采用。这个模式也是能屈能伸,但它倾向于主动扩张,它会尽可能占据新增的区域。|
| QSizePolicy::MinimumExpanding| GrowFlag ,ExpandFlag |主动扩张 |以建议尺寸作为最小尺寸,主动扩张,尽可能占据新增的区域。|
| QSizePolicy::Ignored |ShrinkFlag , GrowFlag, IgnoreFlag | 野蛮扩张 忽略建议尺寸,虽然能屈能伸,但是它会尽最大可能占据空间。|
推荐方法
1. 如果希望控件尺寸在水平或垂直方向固定住,那么把该维度的策略设置为 QSizePolicy::Fixed。
2. 如果希望控件被动拉伸,其他控件不需要空间时这个控件才会占据新增区域,那么可以用 QSizePolicy::Preferred (尺寸下限是隐含的最小建议尺寸)或者 QSizePolicy::Minimum(尺寸下限是建议尺寸)。
4. 如果希望控件尽量拉伸,主动扩张,那就把策略设置为 QSizePolicy::Expanding。
';