Qt中的布局

      Qt6.8的布局管理系统,用于自动排列部件:水平布局QHBoxLayout、垂直布局QVBoxLayout、网格布局QGridLayout、表单布局QFormLayout

      布局(layout)是一种优雅而灵活的方式,可以在其容器内自动排列子部件(child widgets)。每个部件通过sizeHint和sizePolicy属性向布局报告其尺寸要求,布局会相应地分配可用空间

      Qt布局系统(layout system)提供了一种简单而强大的方法,可以自动排列部件中的子部件,以确保它们充分利用可用空间。

      Qt包含一组布局管理类,用于描述部件在应用程序用户界面中的布局方式当部件的可用空间发生变化时,这些布局会自动定位和调整部件的大小,以确保部件的排列一致,并确保整个用户界面保持可用

      所有QWidget子类都可以使用布局来管理其子项。QWidget::setLayout()函数将布局应用于部件。当以这种方式在部件上设置布局时,它将负责以下任务:

      (1).子部件的定位

      (2).合理的窗口默认大小

      (3).合理的窗口最小大小

      (4).调整大小处理

      (5).内容更改时的自动更新:子部件的字体大小、文本或其它内容;隐藏或显示子部件;移除子部件

      Qt的布局类专为手写C++代码而设计,允许以像素为单位指定测量值,从而简化了代码的理解和使用。使用Qt Widgets Designer创建的表单(form)生成的代码也使用了布局类。Qt Widgets Designer在尝试表单设计时非常有用,因为它避免了用户界面开发中通常涉及的编译、链接和运行周期。

      为Widget提供良好布局的最简单方法是使用内置布局管理器:QHBoxLayout、QVBoxLayout、QGridLayout和QFormLayout。这些类继承自QLayout,而QLayout又派生自QObject(而非QWidget)。它们负责一组Widget的几何管理(geometry management)。要创建更复杂的布局,你可以将布局管理器嵌套使用。

      (1).QHBoxLayout:将部件布置在水平行中,从左到右(对于从右到左的语言,则从右到左)。

      (2).QVBoxLayout:将部件从上到下排列在垂直列中。

      (3).QGridLayout:在二维网格中布局部件。部件可以占据多个单元格。

      (4).QFormLayout:以2列描述性标签字段样式布置部件。

      使用布局的技巧

      (1).使用布局时,构造子部件时无需传递父级。布局会自动重新设置部件的父级(使用QWidget::setParent()),使它们成为安装该布局的部件的子级。注意:布局中的部件是安装该布局的部件的子级,而不是布局本身的子级。部件只能以其他部件为父级,而不能以布局为父级。

      (2).你可以使用addLayout()在布局上嵌套布局;内部布局将成为其所插入布局的子级。

      将部件添加到布局时,布局过程如下:

      (1).所有部件最初都会根据其QWidget::sizePolicy()和QWidget::sizeHint()分配一定大小的空间。

      (2).如果任何部件设置的拉伸因子(stretch factor)大于零,则它们会根据拉伸因子的比例分配空间。

      (3).如果任何部件设置的拉伸因子为零,则只有在没有其他部件需要空间的情况下,它们才会获得更多空间。其中,首先会将空间分配给采用扩展大小策略(Expanding size policy)的部件。

      (4).任何分配空间小于其最小尺寸(如果未指定最小尺寸,则为最小尺寸提示(hint))的部件都会分配其所需的最小尺寸。(部件无需设置最小尺寸或最小尺寸提示,在这种情况下拉伸因子是其决定因素。)

      (5).任何分配空间大于其最大尺寸的部件都会分配其所需的最大尺寸。(部件无需设置最大尺寸,在这种情况下拉伸因子是其决定因素。)

      拉伸因子:Widget通常在创建时不设置任何拉伸因子。当它们在布局中布局时,会根据其QWidget::sizePolicy()或最小尺寸提示,以较大者为准分配相应的空间。拉伸因子用于更改Widget所占空间的比例。

      布局中自定义Widget

      (1).创建自己的Widget类时,还应该传递其布局属性。如果Widget使用了Qt布局中的一个,则布局属性已处理完毕。如果Widget没有任何子Widget,或者使用手动布局,则可以使用以下任何或所有机制更改Widget的行为:

      重新实现QWidget::sizeHint()以返回Widget的首选大小。

      重新实现QWidget::minimumSizeHint()以返回Widget可以拥有的最小大小。

      调用QWidget::setSizePolicy()以指定Widget的空间需求。

      (2).每当尺寸提示、最小尺寸提示或尺寸策略发生变化时,都应调用QWidget::updateGeometry()。这将导致重新计算布局。多次连续调用 QWidget::updateGeometry()只会导致一次布局重新计算。

      在Qt Creator中使用布局,如下图所示:

      注:以上整理的内容主要来自于Qt官方文档

      GitHub:https://github.com/fengbingchun/Qt_Test

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

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

相关文章

Agent成本降低46%:缓存规划器的思路模板

论文标题 Cost-Efficient Serving of LLM Agents via Test-Time Plan Caching 论文地址 https://arxiv.org/pdf/2506.14852 作者背景 斯坦福大学 动机 大模型能力的飞速进步催收了大量 AI 智能体应用,它们协调多种模型、工具、工作流来解决实际复杂任务。然而…

Vue 3 + Axios 完整入门实战指南

从入门到深入,手把手教你在 Vue 3 中正确使用 Axios,支持全局挂载、局部分离、使用 proxy 连接场景,适合所有前端小白和实战设计。 大家好,我是石小石!一个热爱技术分享的开源社区贡献者,小册《油猴脚本实战…

CppCon 2017 学习:Effective Qt: 2017 Edition

这段内容讲的是 Qt 容器(Qt Containers)和标准库容器(STL Containers)之间的选择和背景: 主要观点: Qt 容器的历史背景 Qt 自身带有一套容器类(如 QList, QVector, QMap 等)&#…

Pandas 核心数据结构详解:Series 和 DataFrame 完全指南

1. 前言:为什么需要 Pandas 数据结构? 在数据处理和分析中,我们需要高效的方式来存储和操作结构化数据。Python 原生的列表(List)和字典(Dict)虽然灵活,但缺乏针对数据分析的优化。…

使用 Solscan API 的开发指南:快速获取 Solana 链上数据

Solana 生态中有多个区块浏览器,其中 Solscan 提供了功能全面的 API,适用于查询地址资产、Solana 生态中有多个区块浏览器,其中 Solscan 提供了功能全面的 API,适用于查询地址资产、交易详情、合约交互等多种开发场景。相比直接使…

高效工具-libretv

什么是libretv? LibreTV 是一个轻量级、免费的在线视频搜索与观看平台,提供来自多个视频源的内容搜索与播放服务。无需注册,即开即用,支持多种设备访问。项目结合了前端技术和后端代理功能,可部署在支持服务端功能的各类网站托管…

回溯----5.括号生成

题目链接 /** 合法括号生成规则: 第一个括号必须是左括号(第一个为右必定无法闭合) 选择过程中左括号数量必须小于n才可选择左括号(大于n则一定有括号无法闭合) 左括号数量必须大于右括号数量才可选择右括号(相等代表所有前驱括号都已闭合) 所需参数: left 记录已选择左括号数…

【weaviate】分布式数据写入之LSM树深度解析:读写放大的权衡

文章目录 一、LSM树的设计哲学:写优化的根本动机1、 传统B树存储的性能瓶颈2、 LSM树的根本性创新 二、写入路径的深度技术分析1、 WAL机制的精密设计2、 MemTable的数据结构3、 刷盘(Flush)过程的技术细节 三、Compaction策略:LS…

Pygame 大鱼吃小鱼

【Pygame 大鱼吃小鱼】是一款基于Python编程语言和Pygame库开发的趣味游戏。Pygame是Python中一个广泛用于开发2D游戏的开源模块集合,它提供了丰富的功能,如窗口管理器、事件处理、图形绘制等,使得初学者也能快速上手创建游戏。 这段 Python …

【为什么在触发的事件中修改控件属性需要使用`Invoke`】

在C#中,特别是在使用Windows Forms或WPF等GUI框架时,控件的属性和状态通常只能在创建它们的线程(即UI线程,即主线程或用户界面线程)中直接修改。这是由于这些框架的设计基于单线程模型,其中所有与用户界面&…

Android 当apk是系统应用时,无法使用webView的解决方案

最近在做项目时,遇到了一个无法使用webView的问题,apk是系统应用,点击加载webView时应用就是崩溃,原因是系统应用时,Android会觉得webView不安全,不避让加载。 解决的思路就是使用映射,把原生的…

ArcGIS Pro无插件加载(无偏移)天地图!一次添加长久使用

以前我们介绍过:ArcGIS无插件加载(无偏移)天地图。这次我们来介绍ArcGIS Pro中如何添加天地图。 我们将通过从天地图官网自己添加服务链接并添加至收藏的方式以及应急的方法来做本次的介绍。天地图的数据主要包括影像、电子地图、地形图等。我…

Go堆内存管理

# Go堆内存管理 1. Go内存模型层级结构 Golang内存管理模型与TCMalloc的设计极其相似。基本轮廓和概念也几乎相同,只是一些规则和流程存在差异。 2. Go内存管理的基本概念 Go内存管理的许多概念在TCMalloc中已经有了,含义是相同的,只是名字…

零售 EDI:Chewy EDI 项目注意事项

在此前的文章《供应商对接Chewy的EDI需求》中,介绍了Chewy的EDI需求,本文主要为大家分享Chewy对于各个业务单据的细节性需求,了解这些细节性注意事项将帮助企业快速基于知行软件提供的EDI服务与Chewy建立EDI对接。 基于知行之桥EDI系统能够通…

Android录制视频自带铺满多行水印

文章目录 引言环境要求代码实现总结 引言 之前做过几种水印需求,这篇文章是关于使用Android原生库开发录制视频自带满帧文字水印。 环境要求 Android 7.0以上Android Studio ,官方开发者官网视频录制功能参考开源库PictureSelector的camerax库 //用到的…

观远ChatBI:加速零售消费企业数据驱动的敏捷决策

近年来,随着国产大模型(如DeepSeek)的快速发展,企业对智能化数据分析工具的需求日益增长。观远数据推出的ChatBI,基于大语言模型(LLM)打造,旨在通过自然语言交互降低数据分析门槛&am…

鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(1/3)

接下来,我将手把手带领大家去完善,搭建一个鸿蒙的三层架构,另实现HMRouter的嵌入。完成后,大家可任意跳转页面,在三层架构中,书写属于自己的篇章。 第0步,项目与AGC华为控制台关联起来 首先AG…

鸿蒙ArkTs仿网易云音乐项目:架构剖析与功能展示

鸿蒙ArkTs仿网易云音乐项目:架构剖析与功能展示 一、引言 在移动应用开发的浪潮中,音乐类应用始终占据着重要的一席之地。网易云音乐凭借其丰富的音乐资源、个性化的推荐算法和独特的社交互动功能,深受广大用户的喜爱。本文将详细介绍一个基…

【web 安全】从 HTTP 无状态到现代身份验证机制

文章目录 Web 安全与系统设计Web存在的问题:Web 是无状态的解决方案一、早期解决方案:Session Cookie 的诞生二、第二阶段:Token 的出现(前后端分离 移动端的解决方案)三、分析总结:1.早期版本&#xff1…

FlutterUnit TolyUI | 布局游乐场

FlutterUnit 基于 TolyUI 大大简化了界面构建的代码复杂程度,因此之前想要实现的一些小功能,就可以轻松支持。布局游乐场是通过交互的方式来 直观体验 组件的布局特性,从而更易学和掌握。目前 FlutterUnit 已在 知识集录模块新增了 布局宝库&…