news 2026/4/18 14:09:32

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/18 8:33:53

ResNet18图像分类省钱攻略:云端GPU按需付费,比买显卡省万元

ResNet18图像分类省钱攻略:云端GPU按需付费,比买显卡省万元 1. 为什么你需要云端GPU做图像分类 作为一名自由开发者,你可能经常遇到这样的场景:客户发来一堆产品图片需要分类,但你的笔记本电脑跑个ResNet18模型要半小…

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

ResNet18图像分类傻瓜教程:3步出结果,不用懂代码

ResNet18图像分类傻瓜教程:3步出结果,不用懂代码 引言:美术生的AI小助手 作为一名美术创作者,你是否遇到过这样的困扰:画作越来越多,整理分类却越来越费时间?给每幅作品手动添加标签就像在迷宫…

作者头像 李华
网站建设 2026/4/18 3:32:33

高稳定单目深度估计方案|AI 单目深度估计 - MiDaS镜像优势解析

高稳定单目深度估计方案|AI 单目深度估计 - MiDaS镜像优势解析 🌐 技术背景:为何需要轻量级、高稳定的单目深度感知? 在计算机视觉的演进历程中,从2D图像理解3D空间结构始终是核心挑战之一。单目深度估计(M…

作者头像 李华
网站建设 2026/4/18 3:35:06

Rembg抠图质量评估:客观指标与主观评价

Rembg抠图质量评估:客观指标与主观评价 1. 引言:智能万能抠图 - Rembg 在图像处理和内容创作领域,精准、高效地去除背景是许多应用场景的核心需求。无论是电商商品图精修、社交媒体内容制作,还是AI生成图像的后处理,…

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

AI万能分类器核心优势解析|零样本+可视化WebUI

AI万能分类器核心优势解析|零样本可视化WebUI 在当今信息爆炸的时代,文本数据的自动化处理已成为企业智能化转型的核心需求。无论是工单分类、舆情监控,还是内容打标与意图识别,传统机器学习方法往往依赖大量标注数据和漫长的训练…

作者头像 李华