news 2026/4/23 16:57:15

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/23 16:16:11

Rembg模型更新日志:版本迭代与功能增强

Rembg模型更新日志:版本迭代与功能增强 1. 智能万能抠图 - Rembg 在图像处理领域,背景去除是一项高频且关键的任务,广泛应用于电商展示、设计创作、AI换装、虚拟试穿等场景。传统手动抠图效率低下,而早期基于边缘检测或颜色阈值…

作者头像 李华
网站建设 2026/4/23 15:29:33

ResNet18 vs MobileNet实测对比:云端GPU 3小时搞定选型

ResNet18 vs MobileNet实测对比:云端GPU 3小时搞定选型 引言 作为创业团队的CTO或技术负责人,你是否遇到过这样的困境:APP需要集成图像识别功能,但在ResNet18和MobileNet两个主流模型之间犹豫不决?购买测试服务器成本…

作者头像 李华
网站建设 2026/4/23 14:45:51

传统排查 vs AI辅助:登录失败问题处理效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个对比工具,模拟传统手动排查和AI辅助分析两种方式处理用户登录失败问题的流程。工具应记录两种方式的时间消耗、准确率和解决方案的有效性,并生成对…

作者头像 李华
网站建设 2026/4/23 14:30:07

5分钟打造自定义管理员CMD启动器

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个可定制的CMD管理员启动器原型,功能要求:1.支持自定义启动参数;2.记住常用命令历史;3.界面主题切换;4.导出配置功…

作者头像 李华
网站建设 2026/4/23 14:46:19

Spring Batch零基础入门:第一个批处理程序

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个最简单的Spring Batch示例项目,功能是:读取包含10个数字的文本文件,对每个数字加1处理后输出到另一个文件。要求:1) 使用Ma…

作者头像 李华
网站建设 2026/4/23 14:12:42

基于MiDaS大模型的深度估计实践|CPU版高稳定推理,附热力图生成

基于MiDaS大模型的深度估计实践|CPU版高稳定推理,附热力图生成 🌐 业务场景与痛点分析 在计算机视觉领域,三维空间感知是实现智能交互、机器人导航、AR/VR内容生成等高级应用的核心能力。然而,传统深度感知依赖双目摄像…

作者头像 李华