news 2026/4/15 14:45:04

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/4/2 4:15:48

ResNet18图像分类保姆包:数据+代码+环境,开箱即用

ResNet18图像分类保姆包:数据代码环境,开箱即用 1. 为什么选择这个镜像? 如果你是编程培训班的学员,正在为期末的图像分类项目发愁,那么这个ResNet18镜像就是为你量身定做的。想象一下,你拿到一个新手机&…

作者头像 李华
网站建设 2026/4/8 10:18:42

ResNet18多标签分类改造:教你魔改模型应对复杂场景

ResNet18多标签分类改造:教你魔改模型应对复杂场景 1. 为什么需要多标签分类? 在传统图像分类任务中,我们通常只需要预测图片属于哪个单一类别(比如"猫"或"狗")。但在实际工程场景中&#xff0c…

作者头像 李华
网站建设 2026/4/11 4:45:01

ResNet18模型集成技巧:多个模型效果提升3%的秘诀

ResNet18模型集成技巧:多个模型效果提升3%的秘诀 1. 为什么模型集成能提升比赛成绩 在各类AI竞赛中,模型集成(Model Ensemble)是高手们常用的"秘密武器"。简单来说,就像考试时把多个学霸的答案综合起来取平…

作者头像 李华
网站建设 2026/4/10 18:36:11

WANDB实战:从零搭建AI模型监控系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个完整的AI模型监控系统,利用WANDB实现:1. 训练过程实时监控(损失、准确率等);2. 模型部署后性能追踪&#xff08…

作者头像 李华
网站建设 2026/4/3 3:20:36

Rembg性能测试:大规模图片处理方案

Rembg性能测试:大规模图片处理方案 1. 智能万能抠图 - Rembg 在图像处理领域,自动去背景技术一直是电商、设计、内容创作等行业的重要需求。传统方法依赖人工标注或基于颜色阈值的简单分割,效率低且精度差。随着深度学习的发展,…

作者头像 李华
网站建设 2026/4/2 16:20:49

1小时开发:自制轻量版AHSPROTECTOR更新拦截器

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个简易Win11更新拦截器原型,要求:1. 基于Python打包成exe 2. 实现基本更新服务禁用功能 3. 包含图形化开关界面 4. 系统托盘图标显示状态 5. 绕过微软…

作者头像 李华