博客摘录「 [QT_042]Qt学习之控件尺寸调整策略(QSizePolicy)」2024年10月3日

  1. 如果有控件的伸展因子设置为 0,那么这个控件会尽量不占用窗口变大后的空闲区域,如果其他控件都不想要空闲区域,伸展因子为 0 的控件才会去尝试占据窗口变大后的空闲区域。默认情况下,所有控件的伸展因子其实都是 0,这时候布局器会优先拉伸尺寸策略为 QSizePolicy::Expanding 的控件。
  2. 比较例外的是表单布局器,表单布局器在垂直方向不拉伸,第一列的标签也不拉伸,受尺寸调整策略影响的只 有第二列的域在水平方向的拉伸行为。
  3. 伸展策略的枚举常量由 QSizePolicy::​Policy 类型枚举,有七个定义好的常量,用于设置控件的水平和垂直伸展策略:
    枚举常量数值拉伸特点描述
    QSizePolicy::Fixed0固定以建议尺寸固定住,对于水平方向是固定宽度,垂直方向是固定高度。
    QSizePolicy::MinimumGrowFlag被动拉大以建议尺寸为最小尺寸,如果有多余的空间就拉伸,没有多余的空间就保持建议尺寸。被动扩张。
    QSizePolicy::MaximumShrinkFlag被动缩小以建议尺寸为最大尺寸,窗口缩小时,如果其他控件需要,该控件可以尽量缩小为其他控件腾出空间。
    QSizePolicy::PreferredGrowFlag |
    ShrinkFlag
    被动伸缩以建议尺寸为最佳尺寸,能屈能伸,窗口缩小时可以为其他控件腾出空间,窗口变大时,也可以占据其他控件不需要的空闲空间。基类 QWidget 默认是这种策略。被动扩张。
    QSizePolicy::ExpandingGrowFlag |
    ShrinkFlag |
    ExpandFlag
    主动扩张建议尺寸仅仅是明智的建议,但控件基本不采用。这个模式也是能屈能伸,但它倾向于主动扩张,它会尽可能占据新增的区域。
    QSizePolicy::MinimumExpandingGrowFlag |
    ExpandFlag
    主动扩张以建议尺寸作为最小尺寸,主动扩张,尽可能占据新增的区域。
    QSizePolicy::IgnoredShrinkFlag |
    GrowFlag |
    IgnoreFlag
    野蛮扩张忽略建议尺寸,虽然能屈能伸,但是它会尽最大可能占据空间。
  4. 我们对七个策略常量大致分两类,第一类是固定、单向缩小、单向拉大的,相同布局情景中,占据的尺寸大小排序为:
    QSizePolicy::Maximum ≤ QSizePolicy::Fixed ≤ QSizePolicy::Minimum ≤ QSizePolicy::MinimumExpanding 。
  5. 第二类是能屈能伸的,如果在相同布局情景中,占据尺寸大小排序为:

    QSizePolicy::Preferred ≤ QSizePolicy::Expanding ≤ QSizePolicy::Ignored 。
  6.  程序运行时,控件都可以通过函数 hide() 隐藏自己。在控件隐藏时,控件是否还占据布局器里的空间,这是可以设置的:
    void QSizePolicy::​setRetainSizeWhenHidden(bool retainSize)  //设置控件在隐藏时是否仍占据布局器空间bool QSizePolicy::​retainSizeWhenHidden() const     //判断隐藏控件是否占据布局器空间默认情况下,控件调用 hide() 隐藏之后,就不会在通过布局器分配空间了,因为没有必要。
    如果遇到特殊情况需要保留隐藏控件在布局器里的占用的空间,可以用上述函数设置。
    如果设置保留隐藏控件的空间,那么布局器会留下一块空白区域,就是控件在隐藏前应该占据的区域。
  7. 注意,"Fixed" 按钮和 "Minimum" 按钮的尺寸下限是建议尺寸 sizeHint(),
    而 "Preferred" 和 "Expanding" 按钮尺寸下限是最小建议尺寸 minimumSizeHint()。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值