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,自动形成下一条指令的地址。这是计算机中最基本、最常用的寻址方式。 跳跃寻址:通过转移类指令直接或间接给出下一条指令的地址。跳…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
