[Qt 教程之Widgets模块] —— QBoxLayout布局规则

Qt系列教程总目录

QBoxLayout布局主要是控制控件在盒模型中的排列与尺寸,有如下规则:

一、控件的sizePolicy

  • 控件sizePolicy的优先级最高,其次才会考虑布局的规则。
  • QSizePolicyQt Widgets模块下一个单独的类,没有父类也没有子类,只供其他类调用。
  • QSizePolicy有两个枚举,QSizePolicy::PolicyFlagQSizePolicy::Policy,用于表示控件的sizePolicy。
  • QSizePolicy::PolicyFlag枚举如下:
ConstantValueDescription
QSizePolicy::GrowFlag1如有必要,控件大小可以超过系统推荐的最大尺寸
QSizePolicy::ExpandFlag2在父布局允许的范围内,控件要尽可能的大,获得尽可能多的空间
QSizePolicy::ShrinkFlag4如有必要,控件大小可以小于系统推荐的最小尺寸
QSizePolicy::IgnoreFlag8忽略系统推荐尺寸,控件获得尽可能多的空间
  • QSizePolicy::Policy枚举如下:
ConstantValueDescription
QSizePolicy::Fixed0将控件默认尺寸设置为 QWidget::sizeHint()系统推荐尺寸,不可拉伸与缩放
QSizePolicy::Minimum
(QSizePolicy::GrowFlag)
1控件最小尺寸设置为 QWidget::sizeHint()系统推荐最小尺寸,最大尺寸不限制,可拉伸与缩放,但最小不能小于最小尺寸
QSizePolicy::Maximum
(QSizePolicy::ShrinkFlag)
4控件最大尺寸设置为 QWidget::sizeHint()系统推荐最大尺寸,最小尺寸不限制,可拉伸与缩放,但最大不能大于最大尺寸
QSizePolicy::Preferred
(GrowFlag|ShrinkFlag)
5
(1|4)
将控件默认尺寸设置为 QWidget::sizeHint()系统推荐尺寸,可拉伸与缩放,可以超过系统推荐的最大最小尺寸
QSizePolicy::MinimumExpanding
(GrowFlag|ExpandFlag)
3
(1|2)
控件要获得尽可能多的空间,最小不能小于 QWidget::sizeHint()系统推荐的最小尺寸,最大尺寸不限制,可拉伸与缩放
QSizePolicy::Expanding
(GrowFlag|ExpandFlag|ShrinkFlag)
7
(1|2|4)
控件要获得尽可能多的空间,可以超过系统推荐的最大最小尺寸
QSizePolicy::Ignored
(GrowFlag|ShrinkFlag|IgnoreFlag)
13
(1|4|8)
忽略系统推荐尺寸,控件获得尽可能多的空间

二、布局规则,控件尺寸

  • 基本没有规则,主要以控件的sizePolicy为准。

  • 如果布局中多个控件的sizePolicy不同,不同sizePolicy会产生空间竞争,他们的竞争等级如下,等级越高获取的空间越大:

    MinimumExpanding = Expanding > Preferred = Minimum = Ignored > Maximum = Fixed

  • 如下图:

    • 布局(A),由于Ignored忽略了系统推荐尺寸(没有强大后台了,哈哈),所以比他等级高的都有绝对竞争力,结果就是等级为Ignored的控件被挤没了,如下图。
    • 布局(B),由于 MaximumFixed 一个最大不超过系统推荐尺寸,一个最大尺寸被固定为系统推荐尺寸,所以两者都不去竞争多余空间,如下图。
    • 布局(C)PushButton1PushButton2Vertical Policy设置为Minimum,所以可以调整高度以填满布局,PushButton3Vertical PolicyFixed,无法调整高度。
    • 布局(C)PushButton1PushButton2Horizontal Policy设置为MinimumPushButton3Horizontal PolicyFixed,所以PushButton3的宽度为固定值,布局水平方向的剩余空间由PushButton1PushButton2调整宽度来填充。

在这里插入图片描述

三、布局规则,控件间距

  • 规则一:控件sizePolicy的设置,如布局中有可以自由调整尺寸的控件,不设置控件间距,则默认控件间距为6,控件自动调整尺寸以填满布局盒模型。
  • 规则二:控件sizePolicy的设置,如布局中没有可以自由调整尺寸的控件,则控件间距将被拉伸,以满足sizePolicy,但此时控件间距的值仍为默认值或所设置的值。
  • 如下图:
    • 布局(A)PushButton1PushButton4Vertical Policy设置为Fixed,不能自由调整高度,但PushButton2PushButton3Vertical Policy设置为Minimum,可以自由调整高度,根据规则一,控件间距为默认值6
    • 布局(B)PushButton1PushButton3Horizontal Policy都为MinimumPushButton2Horizontal Policy都为Fixed,根据规则一,控件间距为默认值6
    • 布局(C)PushButton1PushButton2Horizontal Policy都为Fixed,都不能自由调整宽度,根据规则二,控件间距被拉伸,但此时控件间距的值仍为默认值6

在这里插入图片描述

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

万俟淋曦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值