Qt 实战(5)布局管理器 | 5.2、深入解析Qt布局管理器

news2024/10/7 12:28:20

文章目录

  • 一、深入解析Qt布局管理器
    • 1、为什么要使用布局管理器?
    • 2、布局管理器类型
    • 3、布局管理器用法详解
      • 3.1、QBoxLayout(垂直与水平布局)
      • 3.2、QGridLayout(网格布局)
      • 3.3、QFormLayout(表单布局)
      • 3.4、QStackedLayout(分组布局管理器)
    • 4、总结

前言:

在Qt框架中,布局管理器(Layout Manager)是一个强大的工具,用于动态调整和管理窗口部件(widgets)的位置和大小。随着用户调整窗口大小或在不同分辨率和DPI(每英寸点数)的屏幕上运行程序,布局管理器能够自动调整其内部部件的排列,确保界面的一致性和可读性。本文将详细介绍Qt中的布局管理器,并探讨其使用方法和最佳实践。

一、深入解析Qt布局管理器

1、为什么要使用布局管理器?

在Qt中,窗口部件(widgets)是用户界面的基本构建块,如按钮、文本框、标签等。然而,仅仅将这些部件简单地放置在窗口中并不足以创建一个功能完善且易于使用的用户界面。当窗口大小改变或在不同DPI的屏幕上显示时,这些部件可能会变得混乱或难以辨认。

为了解决这个问题,Qt引入了布局管理器。布局管理器是一种特殊的窗口部件,它负责控制其内部部件的排列和大小。当窗口大小改变时,布局管理器会自动调整其内部部件的位置和大小,以保持界面的整洁和一致性。这使得开发人员能够更轻松地创建适应不同设备和分辨率的用户界面。

2、布局管理器类型

Qt提供了几种不同类型的布局管理器,每种都有其独特的特点和适用场景:

  • QHBoxLayout:水平布局管理器,将部件水平排列。它可以根据需要添加间距和对齐方式,使部件在水平方向上均匀分布。
  • QVBoxLayout:垂直布局管理器,将部件垂直排列。与QHBoxLayout类似,它也可以添加间距和对齐方式。
  • QGridLayout:网格布局管理器,将部件放置在二维网格中。它允许开发人员指定行和列的数量,并控制部件在网格中的位置和对齐方式。
  • QFormLayout:表单布局管理器,通常用于创建表单界面。它可以将标签(QLabel)和字段(如QTextEdit、QLineEdit等)配对,并自动调整它们的位置和大小。
  • QStackedLayout:堆叠布局管理器,将多个部件堆叠在一起,但一次只显示一个部件。它通常用于实现选项卡(tab)或向导(wizard)界面。

Qt 共提供了 5 种布局管理器,每种布局管理器对应一个类,分别是 QVBoxLayoutQHBoxLayoutQGridLayoutQFormLayoutQStackedLayout,继承关系如下图:

在这里插入图片描述

3、布局管理器用法详解

3.1、QBoxLayout(垂直与水平布局)

垂直布局管理器常用操作,如下:

// 1、添加控件
void addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())

// 2、添加子布局
void addLayout(QLayout *layout, int stretch = 0)

// 3、设置边界
void setContentsMargins(int left, int top, int right, int bottom)
void setMargin(int margin)

// 4、设置间距
void addSpacing(int size)    // 设置固定间隔
void addStretch(int stretch = 0)    // 设置可伸缩间距,stretch是伸缩因子

// 5、设置布局方向
void setDirection(Direction direction)

// 6、设置拉伸系数
void setStretch(int index, int stretch)
bool setStretchFactor(QWidget *widget, int stretch)
bool setStretchFactor(QLayout *layout, int stretch)

// 7、设置布局策略
void setSizeConstraint(SizeConstraint)

3.2、QGridLayout(网格布局)

网格布局管理器常用操作,如下:

// 1、添加控件
void addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, 
	Qt::Alignment alignment = Qt::Alignment())

// 2、添加子布局
void addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, 
	Qt::Alignment alignment = Qt::Alignment())

// 3、设置拉伸系数
void setColumnStretch(int column, int stretch)    // 给指定列设置拉伸系数
void setRowStretch(int row, int stretch)    // 给指定行设置拉伸系数

3.3、QFormLayout(表单布局)

表单布局管理器常用操作,如下:

// 1、添加控件
// 将指定的field控件和存储标签的label控件添加到表单控件中的末尾
void addRow(QWidget *label, QWidget *field)    
 // 将指定的 field 控件和 labelText 标签添加到表单控件的末尾
void addRow(const QString &labelText, QWidget *field)   

// 2、设置标签显示格式,默认标签位于控件的左侧
void setRowWrapPolicy(RowWrapPolicy policy)

3.4、QStackedLayout(分组布局管理器)

分组布局管理器常用操作,如下:

// 1、添加控件
int addWidget(QWidget *widget)

// 2、设置显示样式
void setStackingMode(StackingMode stackingMode)

4、总结

Qt布局管理器是创建灵活和可适应不同设备和分辨率的用户界面的关键工具。通过合理地使用不同类型的布局管理器、嵌套布局、间距和对齐方式以及测试不同环境,开发人员可以创建出功能完善且易于使用的用户界面。希望本文能帮助您更深入地了解Qt布局管理器并为您的开发工作提供有用的指导。

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

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

相关文章

制造业为什么需要ERP企业管理软件?

如今,传统的制造业管理方式逐渐变得力不从心~库存积压、生产效率低下、供应链混乱…想象一下,如果你的企业仍然依赖于手工记录订单、库存和财务数据,那么每当市场发生变动时,你就需要花费大量的时间和精力去重新调整生产计划、更新…

【漏洞复现】CRMEB开源电商系统 /api/products SQL注入漏洞(CVE-2024-36837)

0x01 产品简介 CRMEB开源电商系统是一款由西安众邦网络科技有限公司打造的全栈式电商解决方案,旨在为开发者和商家提供高性能、智能化的电商平台服务。该系统集成了CRM(客户关系管理)、ERP(企业资源规划)和EB(电子商务)的功能,通过深度结合这些功能&…

reverse-android-实战喜马拉雅-ollvm

资料 1. apk: com.ximalaya.ting.android.apk. 2020年8月 可以使用 2. 抓包分析 java层分析 so层分析 登录的算法so是在 liblogin_encrypt.so中。 32位的, 用 IDA打开,查看 静态的导出函数。 打开 一个 首先看到 IDA VIEW 是一个横向 比较多的分支&am…

算法金 | 一个强大的算法模型:t-SNE !!

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种用于降维和数据可视化的非线性算法。它被广泛应用于…

windows实现python串口编程

一、windows安装python Welcome to Python.org 根据windows是64位找到对应的版本下载 下载完后直接安装即可! 打开cmd查看python版本 $ python --version #查看版本 二、串口编程 1、安装pyserial库 pyserial是Python中的一个库,用于处理串口通信。 cmd…

JavaScript-拓展简单和引用数据类型

学习目标: 掌握拓展简单和引用数据类型 学习内容: 拓展-术语解释拓展-基本数据类型和引用数据类型 拓展-术语解释: 拓展-基本数据类型和引用数据类型: 简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型…

C++使用教程

目录 一、软件使用 二、C基础规则补充 关键字 整型取值范围 浮点型取值范围 字符型使用规则 字符串型使用规则 布尔类型 常用的转义移字符 三、数组、函数、指针、结构体补充 1.数组 2.函数 声明: 分文件编写: 值传递: 3.指…

【Spring Cloud应用框架】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

RK3588/算能/Nvidia智能盒子:[AI智慧油站」,以安全为基,赋能精准经营

2021年9月,山东省应急管理厅印发了关于《全省危险化学品安全生产信息化建设与应用工作方案(2021-2022 年)》的通知,要求全省范围内加快推进危险化学品安全生产信息化、智能化建设与应用工作,建设完善全省危险化学品安全…

从老花眼开始

三年前,博主的的火眼金睛开始老花了,表现就是看近处看不清了。人眼对可视距离的标准可以定义为:看手机为近距离,看电脑为中距离,看电视为中距离,看红绿灯为远距离。老花眼就是戴近视眼镜直接看手机看不清了…

【ARM-Linux篇】POSIX消息队列

System V消息队列POSIX 消息队列主 要 函 数#include <sys/msg.h> int msgget(key_t key, int oflag) int msgsnd(int msqid, const void * ptr, size_t length, int flag) ssize_t msgrcv (int msqid, void *ptr, size_t length, long type, int flag) int msgctl(int m…

AI智能盒子助力中钢天源设备工厂升级安全防护

中钢集团安徽天源科技股份有限公司成立于2002年3月27日,是中央企业中国中钢股份有限公司控股的上市公司&#xff0c;主导产品为永磁铁氧体器件、钕铁硼器件、四氧化三锰、锶铁氧体预烧料及各类磁选机等。 在中钢天源智能化升级过程中&#xff0c;采用并定制开发一系列厂区安全…

聊聊系统架构之负载均衡优化实践

一、写在前面 最近在进行线上监控检查时&#xff0c;我遇到了两个超出预期的案例。首先&#xff0c;网关层的监控数据与应用实际监控数据存在不一致性&#xff0c;尤其是max有较大的差异&#xff0c;详见如下图。其次在某个应用中&#xff0c;通过httpclient请求某域名时发现只…

【Spine学习12】之 事件帧

1、新建事件帧&#xff1a; 2、选择第8s的攻击帧&#xff0c;点击第一步新建的attack事件帧前面的钥匙 这样每次动作到8s的时候会自动跳出事件帧提示 这个文字实际动画不会显示 事件是动画过程中所发生情况的触发器。 给程序员识别的

漏洞复现之CVE-2012-1823(PHP-CGI远程代码执行)

关于CGI知识点 CGI模式下的参数&#xff1a; -c 指定php.ini文件的位置 -n 不要加载php.ini文件 -d 指定配置项 -b 启动fastcgi进程 -s 显示文件源码 -T 执行指定次该文件 -h和-&#xff1f; 显示帮助题目如下图&#xff0c;没有什么发现 目录扫描一下 dirsearch -u http://4…

​【数据结构与算法】冒泡排序:简单易懂的排序算法解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 二、冒泡排序原理 &#x1f343;基本思想&#xff1a; &#x1f343;算法…

基于SpringBoot+Vue企业会议室预定管理系统设计和实现

基于SpringBootVue企业会议室预定管理系统设计和实现 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 …

猫头虎 分享已解决Bug || `Uncaught ReferenceError: x is not defined`✨

猫头虎 分享已解决Bug || Uncaught ReferenceError: x is not defined&#x1f680;✨ 摘要 ✨&#x1f4a1; 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师&#xff0c;同时也是一位科技自媒体博主。今天我要和大家分享一些前端开发过程中常见的Bug以及详细的…

STM32 proteus + STM32Cubemx仿真教程(第五课ADC光敏电阻采样教程)

文章目录 前言一、ADC概念二、光敏电阻的概念1. 光敏电阻的工作原理2. 光敏电阻的特性3. 光敏电阻的应用4. 光敏电阻的电路设计5. 实际使用中的注意事项总结 三、STM32Cubemx创建工程四、proteus仿真电路图五、代码编写1. HAL_ADC_Start 函数原型参数返回值功能描述示例 2. HAL…

重学java 73.设计模式

本想送你一本沉思录&#xff0c;可该迷途知返的人是我 —— 24.6.18 设计模式 设计模式(Design pattern)&#xff0c;是一套被反复使用、经过分类编目的、代码设计经验的总结&#xff0c;使用设计模式是为了可重用代码、保证代码可靠性、程序的重用性,稳定性。 1995 年&#x…