【Qt】容器控件、布局管理控件
目录
容器控件
QGroupBox
QTabWidget
布局管理控件
QVBoxLayout
例子:
QHBoxLayout
例子:
QGridLayout
例子:
例子:
QFormLayout
例子:
QSpacerItem
例子:
容器控件
QGroupBox
表示一个带有标题的分组框。可以把其他的控件放到一个分组框里,用来美化界面。
核心属性:
title:分组框的标题。
alignment:分组框内部内容的对齐方式。
flat:边框是否是扁平模式。
checkable:是否可选择。如果设为true在分组框title处会出现一个可勾选框。
checked:是否被选中,checkable为true是前提。
例子:

当设置分组框的checkable为true,就会有一个可勾选框,若不勾选该对勾则该分组框中的控件都不可用。
注意:当将复制的分组框粘贴到父控件QWidget中时,要选中父控件QWidget窗口再粘贴(意思就是将复制的分组框粘贴到父控件QWidget中),否则会将复制的分组框粘贴到原来的分组框中。
QTabWidget
表示一个可以有多个标签页(可以相互切换),每个标签页中可以有多个控件。
核心属性:
tabPosition:标签的位置。
North:上方。South:下方。West:左侧。East:右侧。
currentIndex:当前选中的标签页的下标。(下标从0计算)
currentTabText:当前选中标签页的的文本。
currentTableName:当前选中标签页的名字。
currentTableIcon:当前选中标签页的图标。
tabsClosable:标签页是否可以被关闭。
moveable:标签页是否可以被移动。
核心信号:

例子:
点击按钮增加标签页,并且当前选中的标签页为新增的标签页;删除选中的标签页。


布局管理控件
之前我们在窗口上创建的控件都是固定在窗口界面上的,窗口界面的尺寸可以通过拖拽的方式变化,这些创建的控件不能自适应窗口界面的变化,当界面上有很多控件时就不好我们进行自己计算这些控件在界面上的位置,因此就有了布局管理控件。每个布局管理控件中可以有多个控件。
注意:
1.通过代码创建布局控件。(只能创建一个布局管理控件,且布局管理控件中的控件尺寸可以自适应界面的尺寸变化)
2.通过Qt Designer创建布局管理控件。(可以创建多个布局管理控件,但是布局管理控件中的控件不能自适应界面的尺寸变化)
qt提供了如下几种布局管理策略:
垂直布局、水平布局、网格布局、表单布局
QVBoxLayout
垂直布局管理控件
核心属性:
layoutLeftMargin:左侧边距(相对于布局管理控件的边距)
layoutRightMargin:右侧边距。
layoutTopMargin:上方边距。
layoutBottomMargin:下方边距。
layoutSpacing:垂直布局中控件之间的边距。
例子:
使用代码方式创建布局管理控件和使用Qt Designer创建,分析这两种方法的区别。
使用代码方式创建:

这种方法只能创建一个布局管理控件,且布局管理控件中的控件可以自适应界面的尺寸变化。
使用Qt Designer创建:

对应的widget.ui文件中的xml内容:

注意:
从widget.ui文件中我们可以看到使用Qt Designer创建布局管理控件时会创建一个QWidget然后这个QWidget中嵌套了布局管理控件,实际上一个QWidget中只能有一个布局管理控件,如果要创建多个布局管理控件时就必须有多个QWidget。

QHBoxLayout
水平布局管理控件
核心属性:
和上面的QVBoxLayout属性一样。
例子:
在一个水平布局控件中嵌套垂直布局。

QGridLayout
网格布局控件。可以实现n*m网格的效果。
grid:网格。
核心属性:
上,下,左,右四个方向的边距属性和QVBoxLayout,QHBoxLayout一样,不同的属性说元素间的距离。
layoutHorizontalSpacing:水平方向元素间的距离。
layoutVerticalSpacing:垂直方向元素间的距离。
layoutRowStretch:行方向拉伸系数。
layoutColumnStretch:列方向拉伸系数。
例子:



注意:即使将按钮3的位置设置为第90行第90列,按钮三仍然再按钮2后。在addWidget中设置的行数和列数其实是为了决定布局控件中控件之间的相对位置。
例子:
布局控件中控件的拉伸,必须是以整行或整列拉伸。
1.布局控件中的控件宽度拉伸,对整列控件拉伸。
![]()
column:表示要拉伸那一列的控件。
stretch:表示拉伸值。当窗口界面尺寸发生改变时,不同列控件的宽度比例就会依据设置的列的拉伸系数调整,当某列的拉伸系数为0,不管窗口界面尺寸如何变化该列的控件的宽度保持不变。

2.布局控件中的控件高度拉伸,对整行控件拉伸。
![]()
注意:由于按钮控件的高度默认是不能拉伸的(宽度默认是可以拉伸的),直接通过setRowStretch方法设置拉伸系数是无法拉伸某行按钮控件的高度,必须要将按钮控件的尺寸策略设置为QSizePolicy::Expanding

该方法的参数类型是枚举类型QSizePolicy::Policy
QSizePolicy::Expanding:控件的尺寸可以根据空间调整,尽可能的占据更多空间。

QFormLayout
表单布局控件。专门用于设计两列表单的布局,这种表单布局多用于用户填写信息的场景,左侧列为提示(标签控件),右侧列为输入框。
例子:
向表单控件中添加行的方法:
![]()
![]()
QSpacerItem
QSpacerItem不是布局管理控件,而是搭配布局管理控件使用的控件。在使用布局管理控件的时候可能需要在控件之间添加空白隔开控件,此时就需要QSpacerItem
例子:
在QHBoxLayout中添加一个QSpacerItem隔开两个按钮控件。

相关文章:
【Qt】容器控件、布局管理控件
目录 容器控件 QGroupBox QTabWidget 布局管理控件 QVBoxLayout 例子: QHBoxLayout 例子: QGridLayout 例子: 例子: QFormLayout 例子: QSpacerItem 例子: 容器控件 QGroupBox 表示一个带有…...
cesium小知识:常见的20多种property详解
要详细解释 Cesium 中所有的 Property 类,内容确实会非常丰富且详尽。 Property 基础 Property 是 Cesium 中用于表示随时间或条件变化的值的基础类。它允许你定义属性值如何根据时间、用户交互或其他逻辑动态改变。Property 的设计使得你可以创建复杂的动画和交互效果,而…...
图数据库 | 17、高可用分布式设计(上)
我们在前面的文章中,探索了多种可能的系统扩展方式,以及每种扩展方式的优劣。 本篇文章将通过具体的架构设计方案来对每一种方案的设计、投入产出比、各项指标与功能,以及孰优孰劣等进行评价。 在设计高性能、高可用图数据库的时候…...
1.运控概述
以下并不是我原创(包括图片),都是来源于网络收集。如CSDN博主,朝夕教育,AI等。 什么是运动控制 运控是指“控制移动”之意,可以利用各种电机进行位置控制等操作,让机器听懂你的指令。 什么是…...
DuckDB:密钥管理器及其应用
密钥管理器(Secrets Manager)为所有使用密钥的后端提供了统一的用户界面。密钥信息可以被限定范围,因此不同的存储前缀可以有不同的密钥信息,例如允许在单个查询中连接跨组织的数据。密钥也可以持久化,这样就不需要在每次启动DuckDB时都指定它…...
单元测试4.0+思路总结
Jmockit使用笔记_增加代码覆盖率_覆盖try catch_使用new MockUp私有方法-CSDN博客 一般使用new MockUp模拟被测试代码中的私有方法(常用) 使用new Expetations模拟被测试代码中的方法?...
epoll 水平ET跟边缘LT触发的区别是什么
epoll默认的是水平触发 意思就是当我们depoll默认的是水平触发 LT 模式(水平触发) 工作机制:在 LT 模式下,只要文件描述符(例如套接字)对应的 I/O 缓冲区中有数据可读或者可写空间(对于写操作…...
设计模式 创建型 单例模式(Singleton Pattern)与 常见技术框架应用 解析
单例模式(Singleton Pattern)是一种创建型设计模式,旨在确保某个类在应用程序的生命周期内只有一个实例,并提供一个全局访问点来获取该实例。这种设计模式在需要控制资源访问、避免频繁创建和销毁对象的场景中尤为有用。 一、核心…...
Java项目实战II基于微信小程序的家庭大厨(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在快节奏的生活中,家庭聚餐成为了连接亲情…...
【JVM】总结篇-字节码篇
字节码篇 Java虚拟机的生命周期 JVM的组成 Java虚拟机的体系结构 什么是Java虚拟机 虚拟机:指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现。常用的虚拟机有VMWare,Visual Box&…...
HTML——28.音频的引入
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>音频引入</title></head><body><!--audio:在网页中引入音频当属性名和属性值一样,可以只写属性名src属性:指定音频文件路径,必…...
Visual Point Cloud Forecasting enables Scalable Autonomous Driving——点云论文阅读(12)
此内容是论文总结,重点看思路!! 文章概述 这篇文章介绍了一个名为 ViDAR 的视觉点云预测框架,它通过预测历史视觉输入生成未来点云,作为自动驾驶的预训练任务。ViDAR 集成了语义、三维几何和时间动态信息,有效提升了感知、预测和规划等自动驾驶核心任务的性能。实验表明…...
《Xsens动捕与人形机器人训练》讲座将于1月9日下午2:30在线上召开
《Xsens动捕与人形机器人训练》讲座将于1月9日下午2:30在线上召开,本次讲座中来自Xsens的人形机器人与动捕技术专家Jeffrey Muller与Dennis Kloppenburg不仅将就Xsens动作捕捉系统与人形机器人行为训练中的实际应用进行详细讲解,同时还会对目前大家所关注…...
Mac 安装 Flutter 提示 A network error occurred while checking
错误信息 A network error occurred while checking "https://maven.google.com/": Operation timed out原因 在中国大陆(由于访问 Google 服务器的限制导致超时),无法连接到 https://maven.google.com/ 解决方案 需要使用镜像网站 #flutter 使用国内的镜像 export …...
形态学:图像处理中的强大工具
在图像处理中,形态学(Morphology) 是一类基于形状的操作,主要用于提取、分析和处理图像中的几何结构。尽管形态学操作最初是为二值图像设计的,但它也可以应用于灰度图像,帮助提取图像中的结构特征。形态学操…...
树莓派 Pico RP2040 教程点灯 双核编程案例
双核点亮不同的 LED 示例,引脚分别是GP0跟GP1。 #include "pico/stdlib.h" #include "pico/multicore.h"#define LED1 0 // 核心 0 控制的 LED 引脚 #define LED2 1 // 核心 1 控制的 LED 引脚// the setup function runs once when you press …...
2024年大型语言模型(LLMs)的发展回顾
2024年对大型语言模型(LLMs)来说是充满变革的一年。以下是对过去一年中LLMs领域的关键进展和主题的总结。 GPT-4的壁垒被打破 去年,我们还在讨论如何构建超越GPT-4的模型。如今,已有18个组织拥有在Chatbot Arena排行榜上超越原…...
实现单例模式的五种方式
如何实现一个单例 1、构造器需要私有化 2、提供一个私有的静态变量 3、暴露一个公共的获取单例对象的接口 需要考虑的两个问题 1、是否支持懒加载 2、是否线程安全 1、饿汉式 public class EagerSingleton {private static final EagerSingleton INSTANCE new EagerSi…...
pcl源码分析之计算凸包
文章目录 前言一、应用案例二、源码分析1.ConvexHull类2.reconstruct函数3.performReconstruction 函数4.calculateInputDimension 函数 总结 前言 本文分析一下pcl里凸包的源码。什么是凸包以及怎么求解,可以了解一下概念。 一、应用案例 #include <pcl/surfa…...
在K8S中,Pod请求另一个Pod偶尔出现超市或延迟,如何排查?
在Kubernetes中,当Pod请求另一个Pod时偶尔出现超时或延迟,可能是由于多种原因造成的。以下是一些建立的排查步骤: 1. 检查网络配置和插件: 确认你的kubernetes集群使用了合适的网络插件(如Calico、Flannel等…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
