Qt 布局讲解及举例
Qt布局是一个用于管理窗口部件位置和大小的机制,它使得开发人员能够轻松地创建可伸缩、可调整大小的界面。在Qt中,布局管理器是一种用于自动调整窗口部件大小的机制,它可以根据窗口大小的变化自动调整部件的位置和大小。
Qt布局管理器通过使用布局元素(如QHBoxLayout、QVBoxLayout、QGridLayout等)来管理窗口部件的位置和大小。这些布局元素可以嵌套使用,以创建更复杂的布局。
以下是一些常用的Qt布局元素:
- QHBoxLayout:水平布局管理器,用于将窗口部件水平排列。
- QVBoxLayout:垂直布局管理器,用于将窗口部件垂直排列。
- QGridLayout:网格布局管理器,用于将窗口部件放置在一个网格中。
- QFormLayout:表单布局管理器,用于创建类似于表单的布局,通常用于创建具有标签和输入字段的界面。
- QWidget:部件是Qt中最基本的控件之一,它可以包含其他控件和布局。
使用Qt布局管理器时,需要按照以下步骤进行操作:
- 创建布局元素对象(如QHBoxLayout、QVBoxLayout、QGridLayout等)。
- 将需要管理的窗口部件添加到布局元素中。可以使用addWidget()方法或将部件对象作为布局元素的构造函数参数。
- 设置布局元素的属性,如对齐方式、间距等。可以使用setAlignment()方法或setMargin()方法等。
- 将布局元素设置为窗口的主布局。可以使用setLayout()方法将布局元素对象设置为QWidget的布局。
通过使用Qt布局管理器,可以轻松地创建可伸缩、可调整大小的界面,提高应用程序的用户体验。
以下是一个使用Qt布局的示例:
#include <QApplication>
#include <QWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QPushButton>
#include <QLabel> int main(int argc, char *argv[])
{ QApplication app(argc, argv); // 创建主窗口部件 QWidget *window = new QWidget; window->setWindowTitle("Qt布局示例"); // 创建水平布局 QHBoxLayout *hLayout = new QHBoxLayout; // 创建垂直布局 QVBoxLayout *vLayout1 = new QVBoxLayout; QVBoxLayout *vLayout2 = new QVBoxLayout; // 创建网格布局 QGridLayout *gridLayout = new QGridLayout; // 创建标签和按钮控件 QLabel *label1 = new QLabel("标签1:"); QPushButton *button1 = new QPushButton("按钮1"); QPushButton *button2 = new QPushButton("按钮2"); QPushButton *button3 = new QPushButton("按钮3"); QPushButton *button4 = new QPushButton("按钮4"); QLabel *label2 = new QLabel("标签2:"); QPushButton *button5 = new QPushButton("按钮5"); QPushButton *button6 = new QPushButton("按钮6"); QPushButton *button7 = new QPushButton("按钮7"); QPushButton *button8 = new QPushButton("按钮8"); // 将控件添加到布局中 vLayout1->addWidget(label1); vLayout1->addWidget(button1); vLayout2->addWidget(label2); vLayout2->addWidget(button5); gridLayout->addWidget(button2, 0, 0); gridLayout->addWidget(button3, 0, 1); gridLayout->addWidget(button4, 1, 0); gridLayout->addWidget(button6, 1, 1); gridLayout->addWidget(button7, 2, 0); gridLayout->addWidget(button8, 2, 1); // 将布局添加到水平布局中 hLayout->addLayout(vLayout1); hLayout->addLayout(vLayout2); hLayout->addLayout(gridLayout); // 将水平布局设置为窗口的主布局 window->setLayout(hLayout); window->show(); return app.exec();
}
除了以上利用代码进行界面控件布局,也可以在UI文件上进行界面控件布局。利用代码布局以增加布局的灵活性,比较根据窗口大小改变布局;UI文件上布局相对比较简单。
相关文章:
Qt 布局讲解及举例
Qt布局是一个用于管理窗口部件位置和大小的机制,它使得开发人员能够轻松地创建可伸缩、可调整大小的界面。在Qt中,布局管理器是一种用于自动调整窗口部件大小的机制,它可以根据窗口大小的变化自动调整部件的位置和大小。 Qt布局管理器通过使…...
【微服务】java 规则引擎使用详解
目录 一、什么是规则引擎 1.1 规则引擎概述 1.2 规则引擎执行过程 二、为什么要使用规则引擎 2.1 使用规则引擎的好处 2.1.1 易于维护和更新 2.1.2 增强应用程序的准确性和效率 2.1.3 加快应用程序的开发和部署 2.1.4 支持可视化和可管理性 2.2 规则引擎使用场景 三、…...
HCIA-Datacom跟官方路线学习
通过两次更换策略。最后找到最终的学习方案,华为ICT官网有对这个路线的学习,hcia基础有这个学习路线,hcip也有目录路线。所以,最后制定学习路线,是根据这个认证的路线进行学习了: 官网课程:课程…...
MySQL三大日志详细总结(redo log undo log binlog)
MySQL日志 包括事务日志(redolog undolog)慢查询日志,通用查询日志,二进制日志(binlog) 最为重要的就是binlog(归档日志)事务日志redolog(重做日志)undolog…...
XXL-Job详解(二):安装部署
目录 前言环境下载项目调度中心部署执行器部署 前言 看该文章之前,最好看一下之前的文章,比较方便我们理解 XXL-Job详解(一):组件架构 环境 Maven3 Jdk1.8 Mysql5.7 下载项目 源码仓库地址链接: https://github.…...
支持Arm CCA的TF-A威胁模型
目录 一、简介 二、评估目标 2.1 假定 2.2 数据流图 三、威胁分析 3.1 威胁评估 3.1.1 针对所有固件镜像的一般威胁 3.1.2 引导固件可以缓解的威胁...
【Web端CAD/CAE文字标注】webgl+canvas 2d实现文字标注功能
一、需求背景 在CAD/CAE领域经常会遇到显示节点编号这种需求,效果如下图: 本文介绍如何在WebGL中实现文字的显示,对于如何在OpenGL中实现请绕路。 二、实现原理 Canvas是HTML5提供的元素,用于在网页上绘制图形,其支…...
对话框、内部控件位置
一、了解下几个函数 1、movewindow 了解下:MoveWindow 自己塞进去的是屏幕坐标 CrvtFaultRodDlg* dlg new CrvtFaultRodDlg();if (dlg ! NULL){BOOL ret dlg->Create(IDD_DlgCrvtFaultRod, NULL);if (ret) //Create failed.{RECT rect;{RECT rect1;dlg->…...
【GraphQL 】将GraphQL API添加到Postgres数据库的六种简单方法,比较Hasura、Prisma和其他
PostgreSQL是世界上最流行的开源SQL数据库之一,GraphQL是一种日益流行的API规范。 将经过验证和众所周知的PostgreSQL与GraphQL带来的API创建新方式集成在一起不是很好吗? 在本文中,我们讨论了六个不同的项目,它们试图将SQL与Gr…...
每日一题(LeetCode)----哈希表--有效的字母异位词
每日一题(LeetCode)----哈希表–有效的字母异位词 1.题目(242. 有效的字母异位词) 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互…...
【设计模式】行为型模式-第 3 章第 6 讲【中介者模式】
目录 定义 场景描叙 目的 主要解决 实现 基本类图 案例代码...
Django 通过 Trunc(kind) 和 Extract(lookup_name) 参数进行潜在 SQL 注入 (CVE-2022-34265)
漏洞描述 Django 于 2022 年6月4 日发布了一个安全更新,修复了 Trunc() 和 Extract() 数据库函数中的 SQL 注入漏洞。 参考链接: Django security releases issued: 4.0.6 and 3.2.14 | Weblog | Djang…...
Vue3-toRef 和 toRefs 函数
Vue3-toRef 和 toRefs 函数 功能:可以简化语法调用。toRef 函数执行时会生成一个对象 ObjectRefImpl ,是一个引用对象,具有value属性(getter 和 setter 属性)语法格式:toRef(对象名, 对象中的属性名) toRe…...
STM32---时钟树
写在前面:一个 MCU 越复杂,时钟系统也会相应地变得复杂,如 STM32F1 的时钟系统比较复杂,不像简单的 51 单片机一个系统时钟就 可以解决一切。对于 STM32F1 系列的芯片,其有多个时钟源,构成了一个庞大的是时…...
【功能测试】软件系统测试报告
1.引言 1.1.目的 本测试报告为 xxx 系统测试报告,本报告目的在于总结测试阶段的测试及测试结果分析,描述系统是否达到需求的目的。 本报告预期参考人员包括测试人员、测试部门经理、开发人员、项目管理人员等。 1.2.参考文档 《xxxx系统需求规格说明…...
CentOS一键安装docker脚本
CentOS安装Docker一键脚本 在CentOS上安装Docker是许多项目中常见的任务之一。为了简化这个过程,你可以使用下面的一键脚本。 #!/bin/bash# 卸载旧版本(如果有) sudo yum remove -y docker \docker-client \docker-client-latest \docker-c…...
PostGIS学习教程八:空间关系
PostGIS学习教程八:空间关系 到目前为止,我们只使用了测量(ST_Area、ST_Length)、序列化(ST_GeomFromText)或者反序列化(ST_AsGML)几何图形(geometry)的空间…...
ESP32-Web-Server编程- 通过文本框向 Web 提交数据
ESP32-Web-Server编程- 通过文本框向 Web 提交数据 概述 前述章节我们通过简单 HTML、AJAX、Websocket、SSE 在网页上显示数据,通过网页上的按钮控制 ESP32 的行为。从本节开始,我们将进一步了解通过网页与 ESP32 进行交互的方法。 实现更复杂的交互功…...
NAT网络地址转换
目录 什么是nat nat 实验如何使用SNAT 和 DNAT 实验环境 内网连接外网 1.给网关服务器添加网卡(两张网卡) 2.查看新添加的网卡名 编辑网卡配置 3.开启路由转发 4.打开内网服务器 5.切换到外网服务器(192.168.17.30࿰…...
PyTorch模型训练过程内存泄漏问题解决
近日,在模型训练过程中,发现过一段时间后进程会被kill,观察发现是由于内存泄漏问题造成的。通过逐行代码注释,发现问题在于数据集中的此行代码: info self.data_list[index]这里,self.data_list是dataset…...
单一职责原则 登录功能重构笔记
核心定义单一职责原则:一个类只干一件事,只有一个修改的理由,避免功能杂糅、代码耦合。原有问题原始 Login 登录类,把界面展示、数据库连接、数据查询、登录校验、程序启动全部堆在一个类里,职责混乱,任何小…...
7z2john报错Compress::Raw::Lzma.pm缺失的原理与修复
1. 这不是你的错:当7z2john突然报错“Cant locate Compress::Raw::Lzma.pm”时,你其实只缺一个Perl模块刚打开终端准备提取7z压缩包里的密码哈希,7z2john archive.7z > hash.txt回车一敲,屏幕却猛地跳出一行红字:Ca…...
Unity Play Mode状态保存原理与实战配置指南
1. 为什么“Play Mode Save”不是个噱头,而是Unity开发者每天都在默默忍受的痛点你有没有过这样的经历:在Unity编辑器里调试一个带状态的敌人AI,刚给它加了血量、仇恨目标、技能冷却计时器,正准备按Play键验证行为逻辑——结果一按…...
2026年一键生成论文工具实测报告:5款神器从文献到降重一站式避坑指南
写论文的煎熬,是每个科研人和学生都无法回避的“必修课”。选题无从下手,文献检索耗时费力,格式排版让人抓狂,查重降重更是反复折腾。2026年的今天,AI工具早已不再只是“文字助手”,而是进化成了能全程陪伴…...
C++中多才多艺的 const
1. 定义一个常全局变量1const int global 100; // 初始化之后不可再赋值这样的global实际上是一个常量,这是C用来取代宏定义的其中一种措施,const常量有类型检测,提高编译器的效率。2. 定义常指针这有两个版本,分别是:…...
Python简单算法题
1.字符串中的第一个唯一字符def first_uniq_char(s: str) -> int:from collections import Countercount Counter(s)for i, ch in enumerate(s):if count[ch] 1:return ireturn -12. 合并两个有序数组(双指针,in-place)题目:…...
Burp Suite渗透测试工作流:从环境搭建到报告生成
1. 这不是“学个工具”,而是一套可复用的渗透工作流很多人点开“Burp Suite 入门”类教程,心里想的是:“装个插件、抓个包、改个参数,不就完事了?”——结果三天后连 repeater 怎么发 POST 请求都得翻笔记。我带过二十…...
为Claude Code配置Taotoken备用API解决封号与Token不足问题
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为Claude Code配置Taotoken备用API解决封号与Token不足问题 许多开发者在日常使用Claude Code时,可能会遇到服务暂时不…...
实时任意风格迁移:AdaIN算法在PyTorch中的优雅实现
实时任意风格迁移:AdaIN算法在PyTorch中的优雅实现 【免费下载链接】pytorch-AdaIN Unofficial pytorch implementation of Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization [Huang, ICCV2017] 项目地址: https://gitcode.com/gh_mi…...
CAP 与 BASE:分布式系统取舍原则
CAP 和 BASE 不是为了背概念,而是为了指导分布式系统在网络异常、数据同步和服务可用之间怎么取舍。尤其是分布式事务,最终都绕不开强一致和最终一致的选择。 一句话概括:分布式系统里 P 几乎无法避免,所以真正的取舍通常发生在 C…...
