news 2026/9/16 15:30:54

QSizePolicy在布局中的作用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QSizePolicy在布局中的作用

函数部分

setHorizontalStretch

设置控件的水平拉伸系数比,设置范围是[0, 255],默认值是0,就是没有系数比。但是单独设置它是没有作用的,因为没有科比性,所以布局中需要至少两个控件存在,它才会起到作用。

同时它的优先级比较低,如果布局中也设置拉伸因子,那么将以布局中设置的为准。举个栗子:比如法外狂徒张三和放风的路人甲分赃物,开干前商量好是我9你1。

QPushButton * btn1 = new QPushButton("法外狂徒张三"); QSizePolicy sp1 = btn1->sizePolicy(); sp1.setHorizontalStretch(9); btn1->setSizePolicy(sp1); QPushButton * btn2 = new QPushButton("放风路人甲"); QSizePolicy sp2 = btn1->sizePolicy(); sp2.setHorizontalStretch(1); btn2->setSizePolicy(sp2); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(btn1); layout->addWidget(btn2);

干了一票之后,路人甲作用很大,张三当即决定七三分

layout->setStretch(0, 7); layout->setStretch(1, 3);

setVerticalStretch

设置垂直方向的拉伸因子,和水平拉伸因子一样,只是方向不同而已。

setHorizontalPolicy

设置水平的拉伸策略,它支持的枚举值有以下这些

QSizePolicy::Fixed QSizePolicy::Minimum QSizePolicy::Maximum QSizePolicy::Preferred QSizePolicy::Expanding QSizePolicy::MinimumExpanding QSizePolicy::Ignored

在说明这些值之前,最好先了解下这些策略枚举值,因为这些才是真正起作用的幕后大佬:

QSizePolicy::GrowFlag //允许超过sizeHint的值 QSizePolicy::ExpandFlag //贪婪模式,有多少空间就要多少空间 QSizePolicy::ShrinkFlag //允许比sizeHint的值更小 QSizePolicy::IgnoreFlag //一切听从布局大哥的安排,给多少是多少,毫无怨言

了解了这些后,回头来再看看拉伸策略的枚举值

QSizePolicy::Fixed 0 //老顽固,就是这么大,既不拉伸也不缩小 QSizePolicy::Minimum GrowFlag //sizeHint就是最小值,且只能比sizeHint大 QSizePolicy::Maximum ShrinkFlag //sizeHint就是最大值,且只能比sizeHint小 QSizePolicy::Preferred GrowFlag | ShrinkFlag //sizeHint就是最好的大小,但也允许拉伸也允许缩小 QSizePolicy::Expanding GrowFlag | ShrinkFlag | ExpandFlag //在Preferred的基础上增加了贪婪模式 QSizePolicy::MinimumExpanding GrowFlag | ExpandFlag //虽然也是贪婪模式,但不允许比sizeHint小 QSizePolicy::Ignored ShrinkFlag | GrowFlag | IgnoreFlag //彻底摆烂,任人摆布,爱咋咋地吧

好巧不巧张三正好遇到韩老魔睡觉,悄摸摸偷了韩跑跑的储物袋,这下张三装东西的能力大大提升(属于Minimum级别),而路人甲一介凡人能装得东西超不出口袋上限(属于Maximum级别)

QPushButton * btn1 = new QPushButton("法外狂徒张三"); QSizePolicy sp1 = btn1->sizePolicy(); sp1.setHorizontalPolicy(QSizePolicy::Minimum); btn1->setSizePolicy(sp1); QPushButton * btn2 = new QPushButton("路人甲"); QSizePolicy sp2 = btn1->sizePolicy(); sp2.setHorizontalPolicy(QSizePolicy::Maximum); btn2->setSizePolicy(sp2); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(btn1); layout->addWidget(btn2);


可以看到路人甲的长度大小就没变化。

没过多久,张三又想干一票,然后找到路人乙,万万没想到路人乙竟是个佛系派(属于Ignored级别),张三直接好家伙直接开启贪婪模式(Expanding级别)

QPushButton * btn1 = new QPushButton("法外狂徒张三"); QSizePolicy sp1 = btn1->sizePolicy(); sp1.setHorizontalPolicy(QSizePolicy::Expanding); btn1->setSizePolicy(sp1); QPushButton * btn2 = new QPushButton("路人乙"); QSizePolicy sp2 = btn1->sizePolicy(); sp2.setHorizontalPolicy(QSizePolicy::Ignored); btn2->setSizePolicy(sp2); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(btn1); layout->addWidget(btn2);

路人乙直接没了,张三是一毛也不给呀

setVerticalPolicy

只是方向改为垂直方向,取值和水平策略一致

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 0:18:13

Rembg部署监控:服务健康检查与报警设置

Rembg部署监控:服务健康检查与报警设置 1. 引言 1.1 智能万能抠图 - Rembg 在图像处理和内容创作领域,自动去背景技术已成为提升效率的核心工具之一。Rembg 作为一款基于深度学习的开源图像分割工具,凭借其强大的 U-Net 模型架构&#xff…

作者头像 李华
网站建设 2026/9/12 11:38:13

ResNet18物体检测避坑指南:云端GPU免踩坑,2块钱试效果

ResNet18物体检测避坑指南:云端GPU免踩坑,2块钱试效果 1. 为什么选择ResNet18做毕业设计? 作为一名即将毕业的本科生,你可能正在为毕设的物体检测任务发愁。ResNet18作为经典的卷积神经网络,特别适合毕业设计这类中小…

作者头像 李华
网站建设 2026/9/11 23:32:19

ResNet18保姆级教程:10分钟部署物体识别,小白零失败

ResNet18保姆级教程:10分钟部署物体识别,小白零失败 1. 为什么选择ResNet18做物体识别? 想象你刚拿到一部新手机,需要快速识别相册里的照片是猫还是狗。ResNet18就像手机里的"智能相册分类"功能,只不过它更…

作者头像 李华
网站建设 2026/9/11 19:10:10

用Cursor免费版快速开发一个天气查询应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个天气查询应用,使用Cursor免费版的AI辅助功能完成以下步骤:1. 通过API获取实时天气数据;2. 处理并显示天气信息;3. 添加城市…

作者头像 李华
网站建设 2026/9/10 17:11:21

用AI快速开发REACT和VUE的区别应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个REACT和VUE的区别应用,利用快马平台的AI辅助功能,展示智能代码生成和优化。点击项目生成按钮,等待项目生成完整后预览效果 最近在学前端…

作者头像 李华