✎Qt-doc——尺寸调整策略(QSizePolicy)

news2024/11/18 3:29:55

目录

    • QSizePolicy类详述
    • 成员类型文档

QSizePolicy类详述

小部件的尺寸策略是其愿意以各种方式调整大小的表达方式,并影响布局引擎对小部件的处理方式。每个小部件返回一个描述其在布局时首选的水平和垂直调整策略的QSizePolicy。您可以通过更改其QWidget::sizePolicy属性来更改特定小部件的尺寸策略。

QSizePolicy包含两个独立的QSizePolicy::Policy值和两个拉伸因子;一个描述小部件的水平尺寸策略,另一个描述其垂直尺寸策略。它还包含一个标志,指示其首选尺寸的高度和宽度是否相关。

水平和垂直策略可以在构造函数中设置,并使用setHorizontalPolicy()setVerticalPolicy()函数进行修改。可以使用setHorizontalStretch()setVerticalStretch()函数设置拉伸因子。使用setHeightForWidth()函数可以设置一个标志,指示小部件的sizeHint()是否依赖于宽度(例如菜单栏或自动换行标签)。

可以使用horizontalPolicy()verticalPolicy()horizontalStretch()verticalStretch()函数检索当前的尺寸策略和拉伸因子。或者,使用transpose()函数交换水平和垂直策略和拉伸因子。hasHeightForWidth()函数返回指示size hint依赖关系的标志的当前状态。

使用expandingDirections()函数确定关联小部件是否可以利用比其sizeHint()函数指示的更多空间,以及可以扩展的方向。

最后,QSizePolicy类提供了将此尺寸策略与给定策略进行比较的运算符,以及将此QSizePolicy存储为QVariant对象的QVariant运算符。

关于伸展因子:
如下图,如果把 “One” 按钮的 “水平伸展” 设为 1,“Two” 按钮的 “水平伸展” 设为 2,“Three” 按钮的 “水平伸展” 设为 3,那么在窗口拉大时,该行三个按钮的伸展因子之和为 1+2+3 == 6,新的空间就按照 1/6 ,2/6 ,3/6 的比例划分给这三个按钮,显示效果就如下面这样:

成员类型文档

关于sizeHint()
virtual QSize sizeHint() const
所有的控件初始时,布局器根据控件自己的QWidget::sizePolicy()QWidget::sizeHint(),分配相应的空间给各个控件。
此属性包含小部件的建议尺寸。这个建议尺寸是 Qt 类库自己根据需要显示的内容计算的。所有的控件和窗体都能自己计算建议尺寸。
如果此属性的值是无效的尺寸,则不建议使用任何尺寸。
如果此小部件没有布局,则sizeHint()的默认实现返回无效的尺寸,否则返回布局的首选尺寸。

布局器中影响控件拉伸的因素:
① 最小尺寸和最大尺寸,控件尺寸会限定在最小尺寸和最大尺寸之间。
② 建议尺寸QWidget::sizeHint(),这个建议尺寸是后续尺寸调整的基础,在布局时会先给控件分配建议尺寸的空间。
③ 伸展因子(stretch factors),根据伸展因子的比例分配新增的空闲空间给各个控件。
④ 尺寸策略QWidget::sizePolicy(),在上述处理之后,那么再根据各个控件的尺寸调整策略决定控件应该尽可能拉伸还是尽量不拉伸。


策略的基本标志位:enum QSizePolicy::PolicyFlag
以下这些标志组合在一起形成各种策略值(Policy values):

常量描述
QSizePolicy::GrowFlag1可增长标志,如果有必要的话,可以在建议尺寸之外继续增长。
QSizePolicy::ExpandFlag2尽量扩展标志,能占多大空间就占多大。
QSizePolicy::ShrinkFlag4可收缩标志,如果有必要的话,可以在缩小到建议尺寸之后继续缩小。
QSizePolicy::IgnoreFlag8忽略建议尺寸,这个增长方式最野蛮,能占多大空间就占多大空间。

策略的枚举常量:enum QSizePolicy::Policy
该枚举描述了在构建QSizePolicy时使用的各种每个维度的大小调整类型。

常量拉伸特点描述
QSizePolicy::Fixed0固定QWidget::sizeHint()是唯一可接受的选择,因此小部件永远不会增长或缩小(例如,一个按钮的垂直方向)。以建议尺寸固定住,对于水平方向是固定宽度,垂直方向是固定高度。
QSizePolicy::MinimumGrowFlag被动拉大sizeHint()的大小是最小的,也足够使用。小部件可以扩展,但变大没有任何优势(例如,推按钮的水平方向)。它不能比sizeHint()提供的尺寸更小。以建议尺寸为最小尺寸,如果有多余的空间就拉伸,没有多余的空间就保持建议尺寸。被动扩张。
QSizePolicy::MaximumShrinkFlag被动缩小sizeHint()是一个最大值。如果其他小部件需要空间(例如分隔线),则该小部件可以缩小任意量而不会有任何损害。它不能大于sizeHint()提供的尺寸。以建议尺寸为最大尺寸,窗口缩小时,如果其他控件需要,该控件可以尽量缩小为其他控件腾出空间。
QSizePolicy::PreferredGrowFlag|ShrinkFlag被动伸缩sizeHint()是最好的,但小部件可以被缩小并仍然有用。小部件可以被扩展,但是比sizeHint()更大没有任何优势(默认的QWidget policy)。以建议尺寸为最佳尺寸,能屈能伸,窗口缩小时可以为其他控件腾出空间,窗口变大时,也可以占据其他控件不需要的空闲空间。基类 QWidget 默认是这种策略。被动扩张。
QSizePolicy::ExpandingGrowFlag|ShrinkFlag|ExpandFlag主动扩张sizeHint()是一个合理的大小,但是小部件可以缩小并仍然有用。小部件可以利用额外的空间,因此应尽可能获得更多的空间(例如,水平滑块的水平方向)。建议尺寸仅仅是明智的建议,但控件基本不采用。这个模式也是能屈能伸,但它倾向于主动扩张,它会尽可能占据新增的区域。
QSizePolicy::MinimumExpandingGrowFlag|ExpandFlag主动扩张sizeHint()是最小的,也是足够的。小部件可以利用额外的空间,因此它应该获得尽可能多的空间(例如水平滑块的水平方向)。以建议尺寸作为最小尺寸,主动扩张,尽可能占据新增的区域。
QSizePolicy::IgnoredShrinkFlag|GrowFlag|IgnoreFlag野蛮扩张sizeHint()被忽略。小部件将获得尽可能多的空间。忽略建议尺寸,虽然能屈能伸,但是它会尽最大可能占据空间。

Qt 里面的控件默认策略也是基本符合下面三条建议:
① 如果希望控件尺寸在水平或垂直方向固定住,那么把该维度的策略设置为 QSizePolicy::Fixed
② 如果希望控件被动拉伸,其他控件不需要空间时这个控件才会占据新增区域,那么可以用 QSizePolicy::Preferred(尺寸下限是隐含的最小建议尺寸)或者 QSizePolicy::Minimum(尺寸下限是建议尺寸)。
③ 如果希望控件尽量拉伸,主动扩张,那就把策略设置为 QSizePolicy::Expanding

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/654415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud:分布式事务Seata事务模式

Seata会有 4 种分布式事务解决方案,分别是AT模式、TCC模式、Saga模式和XA模式。 1.AT 模式 2019 年 1 月份,Seata开源了AT模式。AT模式是一种无侵入的分布式事务解决方案。在AT模式下,用户只需关注自己的业务SQL,用户的 业务SQL …

2023-06-16 Android app 使用opencv 调用jni在图片上添加文字,对图片进行模糊处理,源码实例学习。

一、要理解还是得自己看代码 1.1 完整的测试代码路径如下 https://download.csdn.net/download/qq_37858386/87916944 1.2 代码架构 1.3 app 运行效果 二、android studio 添加 opencv module可以参考下面的文章,比较详细。 Android OpenCV 入门教程笔记&#x…

华为OD机试真题 JavaScript 实现【计算最大乘积】【2022Q4 100分】,附详细解题思路

一、题目描述 给定一个元素类型为小写字符串的数组&#xff0c;请计算两个没有相同字符的元素长度乘积的最大值&#xff0c; 如果没有符合条件的两个元素&#xff0c;返回0。 二、输入描述 输入为一个半角逗号分隔的小写字符串的数组&#xff0c;2 < 数组长度<100&am…

Linux之RPM管理工具

目录 Linux之RPM管理工具 定义 作用 RPM软件包 RPM软件包的经典命名格式 RPM安装 语法格式 参数及作用 有关rpm包相关网站 RPM查询功能 语法格式 参数及作用 案例 rpm软件包安装 软件包升级 rpm软件包卸载 rpm卸载 强制卸载 rpm包签名验证 用途 查看签名 …

程序员如何转型成为个人开发者

作者&#xff1a;哈桑c&#xff08;CSDN平台&#xff09; 文章目录 1、什么是个人开发者&#xff1f;2、个人开发者如何赚钱&#xff1f;3、程序员如何转型成为个人开发者&#xff1f;4、成为个人开发者需要学习哪些技能&#xff1f;结语 1、什么是个人开发者&#xff1f; 个人…

redhat安装oracle11g单实例软件建库

1、打开xmanager-passive 2、oracle 用户登录&#xff0c;开始安装 [rootrhel64 database]# su - oracle [oraclerhel64 ~]$ evn |grep oracle -bash: evn: command not found [oraclerhel64 ~]$ evn | grep oracle -bash: evn: command not found [oraclerhel64 ~]$ env | g…

首次使用云服务器搭建网站(三)

上回说到&#xff0c;我们已经搞定了服务器问题和网站模板问题&#xff0c;接下来只需要上传模板即可。 一、上传网站代码 1、打开宝塔面板&#xff0c; 点开文件、这里就是我们服务器的所有文件了。 2、依次点击WWW文件夹、wwwroot文件夹、域名文件夹&#xff0c;进入…

Python之私有属性、私有方法、装饰器及属性和类的命名规则

一、私有属性和私有方法(实现封装) Python对于类的成员没有严格的访问控制限制&#xff0c;这与其他面向对象语言有区别。关于私有属性和私有方法&#xff0c;有如下要点&#xff1a; 通常我们约定&#xff0c;两个下划线开头的属性是私有的(private)。其他为公共的(public)。…

Centos环境 使用docker 部署MySQL 8.X详细版本

文章目录 安装docker配置docker 阿里镜像加速阿里云容器镜像服务ACR配置镜像源 安装部署MySQL拉取MySQL镜像创建挂载文件测试部署部署MySQL进入容器将它的mysql配置同步给宿主机删除test1测试容器 正式部署MySQL查看正式部署的容器状态配置远程连接字符集以及关闭跳过密码验证等…

Aop详解

AOP简介 AOP是一种编程思想&#xff0c;就如同面向对象这种编程思想一样&#xff0c;是一种编程范式&#xff0c;用来指导开发者如何组织程序更好的运行 AOP&#xff08;面向切面编程&#xff09; 作用&#xff1a;在不改变原代码的前提下&#xff0c;为其增加功能。 连接点…

基于 Yeoman 脚手架技术构建前端项目的实践

NodeJ、CLI 基于 Yeoman 脚手架技术构建前端项目的实践 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details…

torch.optim.lr_scheduler.OneCycleLR 学习与理解

一、功能和参数 1.1、通过图像直观地理解 OneCycleLR 的过程&#xff1a; 补充&#xff1a; 生成该图像的代码&#xff1a; 来自&#xff1a;torch.optim.lr_scheduler.OneCycleLR用法_dxz_tust的博客-CSDN博客 import cv2 import torch.nn as nn import torch from torchv…

Nodejs二、内置模块

零、文章目录 Nodejs二、内置模块 1、fs 文件系统模块 &#xff08;1&#xff09;fs 文件系统模块是什么 fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性&#xff0c;用来满足用户对文件的操作需求。 fs.readFile() &#xff1a;用来读取指…

【深度学习-第2篇】CNN卷积神经网络30分钟入门!足够通俗易懂了吧(图解)

网络上有着很多关于CNN入门的教程&#xff0c;但是总还是觉得缺少足够简易、直观、全面的文章&#xff0c;能让人通读下来酣畅淋漓&#xff0c;将CNN概念尽收囊中。本篇文章就想尝试一下&#xff0c;真正地带小白同学们轻松入门。 这篇文章包含很多图片&#xff0c;为了花这些…

k8s-containerd容器运行时默认50G存储位置更换

containerd作为k8s主要的cri&#xff0c;它默认存储位置是使用的/根目录挂载的资源。当容器运行的越来越多&#xff0c;默认的50G不够使用了。有2种方法可以进行解决。 方式1、增加/根分区的磁盘空间。 方式2、修改containerd配置文件&#xff0c;修改默认配置为/home 这里我…

【汤4操作系统】深入理解信号量的使用-三大问题的变体

主要从生产者消费者、读写者、哲学家问题中的经典变体进行讲述&#xff0c;均使用伪代码实现 生产者消费者变体 顾客看作是生产出的产品&#xff0c;理发师看作是消费者&#xff0c;沙发有空位&#xff0c;顾客就进去&#xff0c;沙发有顾客&#xff0c;理发师就去理发 和生产者…

Redis客户端 - Jdies快速入门

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis客户端 - Jdies快速入门 | CoderMast编程桅杆Redis客户端 - Jdies快速入门 简介 Jedis is a Java client for Redis designed for performance and ease of use. Jedis是Redis 的 Java 客户端&#xff0c;专为性能和易…

Python中使用matplotlib绘制各类图表示例

折线图 折线图是一种用于表示数据随时间、变量或其他连续性变化的趋势的图表。通过在横轴上放置时间或如此类似的连续变量&#xff0c;可以在纵轴上放置数据点的值&#xff0c;从而捕捉到数据随时间发生的变化。折线图可以用于比较不同变量的趋势&#xff0c;轻松地发现不同的…

不写代码如果解决Jmeter跨线程组取参数值问题?

目录 前言 定义属性法 文件转接法 总结&#xff1a; 前言 如果你工作中已经在用jmeter做接口测试&#xff0c;或性能测试了&#xff0c;你可能会遇到一个麻烦。 那就是jmeter的变量值不能跨线程组传递。 看&#xff0c;官方就已经给出了解释&#xff1a; 这个不是jmeter的…

机器学习——识别足球和橄榄球

一、选题的背景 橄榄球起源于足球&#xff0c;二者即相似又有所区别。计算机技术发展至今&#xff0c;AI技术也有了极大的进步&#xff0c;通过机器学习不断的训练&#xff0c;AI对于足球和橄榄球的识别能力可以帮助人们对足球和橄榄球的分辨。机器学习是一种智能技术&#xff…