当前位置: 首页 > news >正文

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.lqws.cn/news/464095.html

相关文章:

  • 深入浅出:Go语言中的Cookie、Session和Token认证机制
  • 关于 Kyber:抗量子密码算法 Kyber 详解
  • 首页实现多级缓存
  • 【信号与系统四】采样和通信系统
  • rent8_wechat-最常用出租屋管理系统-微信小程序
  • Mac Parallels Desktop Kali 2025 代理设置
  • 外卖之后再度进军酒旅,京东多线出击的逻辑是什么?
  • Electron 开发桌面应用概述
  • 跟着AI学习C# Day27
  • Pytorch3D 中涉及的知识点汇总
  • 【Flutter】状态管理框架Provider和Get对比分析(面试常用)
  • Python内存使用分析工具深度解析与实践指南(下篇)
  • 江科大STM32入门:DMA传输数据
  • java 找出两个json文件的不同之处
  • 神经网络中的均方误差(Mean Squared Error)详解
  • 自定义OceanBase集群安装并使用OCP接管集群
  • 【DCS开源项目】—— Lua 如何调用 DLL、DLL 与 DCS World 的交互
  • LeetCode第279题_完全平方数
  • Vue3 的生命周期:从 Composition API 视角看
  • DeepEP开源MoE模型分布式通信库
  • Linux运维新人自用笔记(Ubuntu磁盘命名规则、新磁盘分区、主流文件系统类型、mkfs命令格式化文件系统、临时和永久挂载、挂载报错、dd指令)
  • 2.7 Python方法调用机制解析:从描述符到字节码执行
  • 5.2 Qt Creator 使用FFmpeg库
  • win环境使用openssl创建p12证书
  • 微前端MFE:(React 与 Angular)框架之间的通信方式
  • word-spacing 属性
  • Kubernetes控制平面组件:Kubelet详解(八):容器存储接口 CSI
  • C++链表的虚拟头节点
  • 课程目录:腾讯混元3D × Unity3D全流程开发
  • Python pytesseract【OCR引擎库】 简介