QSizePolicy简介

前言

QSizePolicy是一个在QT开发中并不常见,但又十分重要的东西。它负责控制控件的伸缩属性,我们可以通过使用不同的值而达到各种UI布局。
之所以说并不常见,原因是我们更多的在UI界面中直接设置它的属性sizePolicy或者sizeType,而并不直接用代码书写。
且对于平时绝大多数开发工作来说,我们只需要用到它的三个值便可以解决大部分问题:Fixed、Preferred、Expanding。所以并不需要了解它的具体实现方式和其他类型,但实际上它还可以做的更多。

正文

一、QSizePolicy的定义

  • 关于QSizePolicy的定义,官方给出的文档中是这么说的
The QSizePolicy class is a layout attribute describing horizontal and vertical resizing policy.

直译过来大致是说:QSizePolicy类是描述水平和垂直调整大小策略的布局属性。

二、sizePolicy的类型

  • QT为我们提供了7种Policy,其源码的定义如下:
    enum Policy {
        Fixed = 0,
        Minimum = GrowFlag,
        Maximum = ShrinkFlag,
        Preferred = GrowFlag | ShrinkFlag,
        MinimumExpanding = GrowFlag | ExpandFlag,
        Expanding = GrowFlag | ShrinkFlag | ExpandFlag,
        Ignored = ShrinkFlag | GrowFlag | IgnoreFlag
    };
  • Flag的定义如下
    enum PolicyFlag {
        GrowFlag = 1,
        ExpandFlag = 2,
        ShrinkFlag = 4,
        IgnoreFlag = 8
    };

可以看到,实际的sizePolicy是由PolicyFlag 组合而成的。这也更符合控件设计的思路,提出各个sizePolicy的公共属性,方便理解和维护。
之后我将QT给出的解释放在下面,英文是QT官方文档,翻译是百度+笔者自行总结得到的。读者可以先行领略,或者直接跳到后文,笔者将会用UI实例让读者更加容易的理解QSizePolicy。

ConstantValueDescriptionTranslation
QSizePolicy::GrowFlag1The widget can grow beyond its size hint if necessary.如果有必要,widget可以扩展到超过其默认大小
QSizePolicy::ExpandFlag2The widget should get as much space as possible.widget应尽可能的占据更多空间
QSizePolicy::ShrinkFlag4The widget can shrink below its size hint if necessary.如果有必要,widget可以s收缩到小于其默认大小
QSizePolicy::IgnoreFlag8The widget’s size hint is ignored. The widget will get as much space as possible.widget默认大小会被忽略,且它会尽可能的占据更多空间
ConstantValueDescriptionTranslation
QSizePolicy::Fixed0The QWidget::sizeHint() is the only acceptable alternative, so the widget can never grow or shrink (e.g. the vertical direction of a push button).QWidget永远不会增长或收缩
QSizePolicy::MinimumGrowFlagThe sizeHint() is minimal, and sufficient. The widget can be expanded, but there is no advantage to it being larger (e.g. the horizontal direction of a push button). It cannot be smaller than the size provided by sizeHint().限定了QWidget的最小尺寸为sizeHint(),且有被动扩展的趋势。
QSizePolicy::MaximumShrinkFlagThe sizeHint() is a maximum. The widget can be shrunk any amount without detriment if other widgets need the space (e.g. a separator line). It cannot be larger than the size provided by sizeHint().限定了QWidget的最大尺寸为sizeHint(),且有被动收缩的趋势。
QSizePolicy::PreferredGrowFlag \ ShrinkFlagThe sizeHint() is best, but the widget can be shrunk and still be useful. The widget can be expanded, but there is no advantage to it being larger than sizeHint() (the default QWidget policy).sizeHint()是最好的大小,但必要时也可缩小或扩大尺寸
QSizePolicy::ExpandingGrowFlag \ ShrinkFlag \ ExpandFlagThe sizeHint() is a sensible size, but the widget can be shrunk and still be useful. The widget can make use of extra space, so it should get as much space as possible (e.g. the horizontal direction of a horizontal slider).sizeHint()是一个合理的大小,但QWidget趋向于获取更多空间,必要时也会收缩自身大小
QSizePolicy::MinimumExpandingGrowFlag \ ExpandFlagThe sizeHint() is minimal, and sufficient. The widget can make use of extra space, so it should get as much space as possible (e.g. the horizontal direction of a horizontal slider).限定了QWidget的最小尺寸为sizeHint(),但QWidget趋向于获取更多空间。
QSizePolicy::IgnoredShrinkFlag \ GrowFlag \ IgnoreFlagThe sizeHint() is ignored. The widget will get as much space as possible.QWidget的sizeHint()会被忽略,且它会尽可能的占据更多空间

注:sizeHint()为QWidget的建议大小,如果用户指定的值无效或者其没有被布局,则会返回无效值。

可以得出以下结论:
主动获取空间能力:Expanding = MinimumExpanding >> Preferred = Minimum = Ignored >> Fixed = Maximum 这也对应了PolicyFlag 中ExpandFlag 与 GrowFlag兼具扩张能力,而ExpandFlag 扩张能力更佳。
保持自身空间能力:Minimum = MinimumExpanding >> Fixed >> Maximum >> Preferred = Expanding >> Ignored

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值