Qt 控件与布局管理
1. Qt 控件的父子继承关系
在 Qt 中,继承自 QWidget 的类,通常会在构造函数中接收一个 parent 参数。
这个参数用于指定当前空间的父控件,从而建立控件间的父子关系。
当一个控件被设置为另一控件的子控件时,它会自动成为该父控件的一部分,且具备以下特性:
-
子控件会随着父控件,一起显示或隐藏;
-
子控件会被包含在父控件的几何布局中;
-
当父控件被删除时,所有的子控件会被自动删除,防止内存泄漏。
// .h
class SessionFriendArea : public QScrollArea
{Q_OBJECT
public:QWidget* container;
}// .cpp
SessionFriendArea::SessionFriendArea(QWidget *parent): QScrollArea{parent}
{container = new QWidget();this->setWidget(container);
}
在 SessionFriendItem 的构造函数中, parent 被传递给 QScrollArea 的构造函数 —— 让 QScrollArea 成为父控件的一部分,从而正确地管理其生命周期和位置。
在构造函数体中,创建 container 并设置为 this 的子控件(即 QScrollArea 的子控件):
container 会随 QScrollArea 的 显示/隐藏 而 显示/隐藏;
container 的生命周期与 QScrollArea 绑定,当 QScrollArea 被销毁时,container 也会被自动销毁。
2. QWidget 和 QLayout
在 Qt 中,QWidget 和 QLayout 之间的关系是紧密且互补的。
理解它们的关系,对构建复杂的用户界面统至关重要。
2.1 QWidget 简介
QWidget 是所有界面对象的基类,代表了一个可以显示和交互的窗口部件(控件),如:按钮、标签、窗口。
每个 QWidget 可以有自己的几何属性(位置、大小)、样式、事件处理机制等。
2.2 QLayout 简介
QLayout 是一个抽象基类,用于管理一组 QWidget 的布局。
它的主要作用是,自动调整这些控件的位置和大小,以便它们能适应不同的窗口大小和分辨率。
常见的布局管理器:QVBoxLayout 、QHBoxLayout 、QGridLayout 。
2.3 QWidget 包含 QLayout
可以通过 QWidget::setLayout(QLayout*) 方法,将一个布局管理器设置给 QWidget ;
也可以通过 QWidget::Layout() 方法,获取 QWidget 内的布局。
QWidget* widget = new QWidget();
QVBoxLayout* layout = new QVBoxLayout();QPushButton* btn1 = new QPushButton();
btn1->setText(QString("按钮1"));QPushButton* btn2 = new QPushButton();
btn2->setText(QString("按钮2"));layout->addWidget(btn1);
layout->addWidget(btn2);widget->setLayout(layout); // 设置布局
当 QWidget 被赋予一个布局时,该布局会自动管理,所有添加到该该布局中的子控件的位置和大小。
2.4 QLayout 包含 QWidget
可以通过 QLayout::addWidget(QWidget*) ,将控件=添加到布局中;
也可以通过 QLayout::addLayout() 方法,将一个布局嵌套在另一个布局中,从而实现复杂的界面结构。
布局管理器会根据其规则(垂直排列、水平排列、网格排列等),自动调整这些控件的位置和大小。
int main(int argc, char *argv[])
{QApplication a(argc, argv);QWidget* widget = new QWidget();QVBoxLayout* mainlayout = new QVBoxLayout();QHBoxLayout* sublayout = new QHBoxLayout();QPushButton* btn1 = new QPushButton("按钮1");QPushButton* btn2 = new QPushButton("按钮2");QPushButton* btn3 = new QPushButton("按钮3");sublayout->addWidget(btn2);sublayout->addWidget(btn3);mainlayout->addWidget(btn1);mainlayout->addLayout(sublayout);widget->setLayout(mainlayout);widget->show();return a.exec();
}

3. Qt 控制窗口大小方法
setFixedSize():设置控件的固定高度和宽度 —— 使得控件的大小,不会随窗口或布局管理器的变化而改变。
QPushButton* btn = new QPushButton();
btn->setFixedSize(QSize(50, 50));
setFixedWidth()、setFixedHeight():分别设置控件的固定宽度和高度。setMinimunSize()、setMaximunSize():分别设置控件的最小尺寸和最大尺寸。setSizePolicy():设置控件的尺寸策略,定义了控件如何响应布局管理器的要求及窗口大小的变化.
Fixed 、Preferred 、Expanding
tips:
- 对于 QPushButton ,setFixedSize() 的作用是设置控件的大小;setIconSize() 的作用是设置控件图标的大小(在 setIcon() 后)。
- 大多数情况下,调用 setFixedSize() 等方法后,无需额外调用 setSizePolicy() 。
4. QScrollArea
QScrollArea 是一个用于显示可滚动内容的容器控件。
它允许用户通过滚动条,查看超出窗口可视范围的内容。
setWidgetResizable(bool resizable):决定是否自动调整内部小部件的大小以适应窗口大小。verticalScrollBar():返回与QScrollArea关联的垂直方向上的滚动条。horizontalScrollBar():返回与QScrollArea关联的水平方向上的滚动条。
相关文章:
Qt 控件与布局管理
1. Qt 控件的父子继承关系 在 Qt 中,继承自 QWidget 的类,通常会在构造函数中接收一个 parent 参数。 这个参数用于指定当前空间的父控件,从而建立控件间的父子关系。 当一个控件被设置为另一控件的子控件时,它会自动成为该父控…...
使用小尺寸的图像进行逐像素语义分割训练,出现样本不均衡训练效果问题
在使用小尺寸图像进行逐像素语义分割训练时,确实可能出现样本不均衡问题,且这种问题可能比大尺寸图像更显著。 1. 小尺寸图像如何加剧样本不均衡? (1) 局部裁剪导致类别分布偏差 问题:遥感图像中某些类别(如道路、建…...
0.91英寸OLED显示屏一种具有小尺寸、高分辨率、低功耗特性的显示器件
0.91英寸OLED显示屏是一种具有小尺寸、高分辨率、低功耗特性的显示器件。以下是对0.91英寸OLED显示屏的详细介绍: 一、基本参数 尺寸:0.91英寸分辨率:通常为128x32像素,意味着显示屏上有128列和32行的像素点,总共409…...
读书笔记--分布式服务架构对比及优势
本篇是在上一篇的基础上,主要对共享服务平台建设所依赖的分布式服务架构进行学习,主要记录和思考如下,供大家学习参考。随着企业各业务数字化转型工作的推进,之前在传统的单一系统(或单体应用)模式中&#…...
HTML5 新的 Input 类型详解
HTML5 引入了许多新的输入类型,极大地增强了表单的功能和用户体验。这些新的输入类型不仅提供了更好的输入控制,还支持内置的验证功能,减少了开发者手动编写验证逻辑的工作量。本文将全面介绍 HTML5 中新增的输入类型,并结合代码示…...
ESP32-CAM实验集(WebServer)
WebServer 效果图 已连接 web端 platformio.ini ; PlatformIO Project Configuration File ; ; Build options: build flags, source filter ; Upload options: custom upload port, speed and extra flags ; Library options: dependencies, extra library stor…...
Case逢无意难休——深度解析JAVA中case穿透问题
Case逢无意难休——深度解析JAVA中case穿透问题~ 不作溢美之词,不作浮夸文章,此文与功名进取毫不相关也!与大家共勉!! 更多文章:个人主页 系列文章:JAVA专栏 欢迎各位大佬来访哦~互三必回&#…...
Golang笔记——常用库context和runtime
大家好,这里是Good Note,关注 公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Golang的常用库context和runtime,包括库的基本概念和基本函数的使用等。 文章目录 contextcontext 包的基本概念主要类型和函数1. **…...
2000-2020年各省第二产业增加值占GDP比重数据
2000-2020年各省第二产业增加值占GDP比重数据 1、时间:2000-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区名称、年份、第二产业增加值占GDP比重 4、范围:31省 5、指标解释:第二产业增加值占GDP比重…...
unity商店插件A* Pathfinding Project如何判断一个点是否在导航网格上?
需要使用NavGraph.IsPointOnNavmesh(Vector3 point) 如果点位于导航网的可步行部分,则为真。 如果一个点在可步行导航网表面之上或之下,在任何距离,如果它不在更近的不可步行节点之上 / 之下,则认为它在导航网上。 使用方法 Ast…...
Day24-【13003】短文,数据结构与算法开篇,什么是数据元素?数据结构有哪些类型?什么是抽象类型?
文章目录 13003数据结构与算法全书框架考试题型的分值分布如何? 本次内容概述绪论第一节概览什么是数据、数据元素,数据项,数据项的值?什么是数据结构?分哪两种集合形式(逻辑和存储)?…...
富文本 tinyMCE Vue2 组件使用简易教程
参考官方教程 TinyMCE Vue.js integration technical reference Vue2 项目需要使用 tinyMCE Vue2 组件(tinymce/tinymce-vue)的第 3 版 安装组件 npm install --save "tinymce/tinymce-vue^3" 编写组件调用 <template><Editorref"editor"v-m…...
强化学习在自动驾驶中的实现与挑战
强化学习在自动驾驶中的实现与挑战 自动驾驶技术作为当今人工智能领域的前沿之一,正通过各种方式改变我们的出行方式。而强化学习(Reinforcement Learning, RL),作为机器学习的一大分支,在自动驾驶的实现中扮演了至关重要的角色。它通过模仿人类驾驶员的决策过程,为车辆…...
记录 | MaxKB创建本地AI智能问答系统
目录 前言一、重建MaxKBStep1 复制路径Step2 删除MaxKBStep3 创建数据存储文件夹Step4 重建 二、创建知识库Step1 新建知识库Step2 下载测试所用的txtStep3 上传本地文档Step4 选择模型补充智谱的API Key如何获取 Step5 查看是否成功 三、创建应用Step1 新建应用Step2 配置AI助…...
特种作业操作之低压电工考试真题
1.下面( )属于顺磁性材料。 A. 铜 B. 水 C. 空气 答案:C 2.事故照明一般采用( )。 A. 日光灯 B. 白炽灯 C. 压汞灯 答案:B 3.人体同时接触带电设备或线路中的两相导体时,电流从一相通过人体流…...
[免费]基于Python的Django博客系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的基于Python的Django博客系统,分享下哈。 项目视频演示 【免费】基于Python的Django博客系统 Python毕业设计_哔哩哔哩_bilibili 项目介绍 随着互联网技术的飞速发展,信息的传播与…...
Cannot resolve symbol ‘XXX‘ Maven 依赖问题的解决过程
一、问题描述 在使用 Maven 管理项目依赖时,遇到了一个棘手的问题。具体表现为:在 pom.xml 文件中导入了所需的依赖,并且在 IDE 中导入语句没有显示为红色(表示 IDE 没有提示依赖缺失),但是在实际使用这些依…...
我们需要有哪些知识体系,知识体系里面要有什么哪些内容?
01、管理知识体系的学习知识体系 主要内容: 1、知识管理框架的外部借鉴、和自身知识体系的搭建; 2、学习能力、思维逻辑能力等的塑造; 3、知识管理工具的使用; 4、学习资料的导入和查找资料的渠道; 5、深层关键的…...
什么是vue.js组件开发,我们需要做哪些准备工作?
Vue.js 是一个非常流行的前端框架,用于构建用户界面。组件开发是 Vue.js 的核心概念之一,通过将界面拆分为独立的组件,可以提高代码的可维护性和复用性。以下是一个详细的 Vue.js 组件开发指南,包括基础概念、开发流程和代码示例。 一、Vue.js 组件开发基础 1. 组件的基本…...
网络工程师 (3)指令系统基础
一、寻址方式 (一)指令寻址 顺序寻址:通过程序计数器(PC)加1,自动形成下一条指令的地址。这是计算机中最基本、最常用的寻址方式。 跳跃寻址:通过转移类指令直接或间接给出下一条指令的地址。跳…...
SecGPT-14B提示工程:提升OpenClaw安全报告可读性的秘诀
SecGPT-14B提示工程:提升OpenClaw安全报告可读性的秘诀 1. 当安全报告遇上OpenClaw:我的真实痛点 上周五凌晨2点,我被OpenClaw的告警邮件惊醒——它发现我的个人服务器存在一个高危漏洞。但当我打开那份自动生成的安全报告时,眼…...
ASLR:现代操作系统中的内存安全守护者
1. ASLR:现代操作系统的内存安全基石 想象一下你家的门锁每天都会自动更换位置——这就是ASLR(地址空间布局随机化)对计算机程序做的事。作为现代操作系统最基本的安全机制之一,ASLR通过打乱程序在内存中的"居住地址"&…...
Qwen3-0.6B-FP8数据库智能查询:用自然语言生成SQL语句
Qwen3-0.6B-FP8数据库智能查询:用自然语言生成SQL语句 你有没有过这样的经历?面对一个数据库,明明知道数据就在里面,却因为不懂SQL而束手无策。想查“上个月哪个产品卖得最好”,或者“找出最近三个月复购率最高的客户…...
SEO关键词推广与视频内容创作有什么关系
SEO关键词推广与视频内容创作:一场紧密交织的战斗 在当今的数字化时代,SEO(搜索引擎优化)和视频内容创作已经成为每个企业和个人在网络世界中取得成功的重要途径。SEO关键词推广与视频内容创作究竟有什么关系呢?本文将…...
Realistic Vision V5.1虚拟摄影棚快速上手:新手3步生成比肩单反的人像
Realistic Vision V5.1虚拟摄影棚快速上手:新手3步生成比肩单反的人像 1. 为什么选择Realistic Vision V5.1虚拟摄影棚 如果你一直想尝试专业级人像摄影,但又苦于没有昂贵的单反设备和摄影棚,Realistic Vision V5.1虚拟摄影棚就是为你量身定…...
C语言宏定义:嵌入式开发中的高效利器与避坑指南
1. C语言宏定义的基础与陷阱在嵌入式开发中,宏定义是C语言最强大的特性之一,但也是最容易踩坑的特性。让我们从一个简单的需求开始:如何用宏实现两个数的比较并返回较小值?初学者最常见的写法是这样的:#define MIN(a,b…...
利用Qwen3-14B-AWQ优化数据库课程设计:智能ER图生成与SQL语句优化
利用Qwen3-14B-AWQ优化数据库课程设计:智能ER图生成与SQL语句优化 1. 课程设计的痛点与解决方案 每到数据库课程设计阶段,学生们总会遇到相似的困扰:面对一个模糊的业务需求,如何准确识别实体和关系?如何设计规范的数…...
AI 面试系统设计题怎么准备?5 个完整案例 + 回答框架
AI 面试系统设计题怎么准备?5 个完整案例 回答框架(CSDN 教程版) 摘要:系统设计题是 AI 面试中最能拉开差距的环节。本文提供 5 个完整案例和通用回答框架,帮助工程师高效准备 AI 面试系统设计题。 前言 系统设计题是…...
结合鸿蒙系统特性:在HarmonyOS应用中嵌入Pixel Couplet Gen生成能力
结合鸿蒙系统特性:在HarmonyOS应用中嵌入Pixel Couplet Gen生成能力 1. 引言:当传统艺术遇见分布式技术 春节贴春联是中国人延续千年的文化传统,而如今,借助AI技术和鸿蒙系统的分布式能力,我们可以让这一传统焕发新的…...
PasteMD实际作品:将播客文字稿→带时间戳/嘉宾标注/知识点标签的Markdown
PasteMD实际作品:将播客文字稿→带时间戳/嘉宾标注/知识点标签的Markdown 1. 项目简介 PasteMD是一款基于本地Ollama框架构建的智能文本格式化工具,专门解决日常工作中遇到的文本整理难题。无论你是从会议记录、播客转录还是笔记草稿中获取的杂乱文本&…...
