当前位置: 首页 > news >正文

Qt5 框架学习及应用 — 对象树

Qt 对象树

  • 对象树概念
  • Qt为什么使用对象树 ?
  • 将对象挂到对象树上

对象树概念

对象树:对于树的概念,相信许多学过数据结构的同学应该都不会陌生。在学习数据结构的时候我们所接触的什么二叉树、多叉树、哈夫曼树、AVL树、再到红黑树、B/B+树……其实说白了都是树型结构的数据结构。

如果你说我还没有学过数据结构,听不懂或者不了解说的这些数据结构,那也没关系——文件目录,在计算机上的文件目录其实也是一个多叉树的树形结构。通常我们以盘为根,文件夹为节点,向下延伸。
如下图
在这里插入图片描述

Qt中的对象树也是一个多叉树的树形结构呈现的,其实除了Qt以外,还有很多的语言也是使用了对象树的概念,例如大伙熟知的Java、JavaScript。

Qt为什么使用对象树 ?

先说结论:为了方便对象回收
在Qt编程中我们是在对一个页面窗口页面进行操作,在这个页面窗口中不乏会使用到很多的控件,例如按钮、文本框、输入框等。我们期望这些控件是能够跟随着窗口的生命周期一起显示在页面窗口中,当关闭窗口时这些控件也跟随窗口关闭一起释放。

所以这些需要显示的对象一定是不能创建在栈区上,因为栈区的资源是局部的,出了作用域就直接释放了。要让对象能够跟随着窗口关闭释放,就只能通过在堆区创建对象,然后将对象挂载到对象树上,使用对象树来进行统一的释放。

关于对象树,Qt学习了Java的思想——Java中所有的对象都继承了一个叫Object类。Qt也自己也搞了个叫QObject的类,当关闭窗口后,QObject类析构,连带着所有挂在QObject对象树上的子类一起析构(其实是子类先析构完成,最后再析构QObject,只是为了好理解,这也是面向对象的知识,这里不多赘述~~),。
在这里插入图片描述

将对象挂到对象树上

以QWidget为例,当我们创建的项目时选择以QWidget类作为父类构建,此时编译器会生成一个继承自QWidget的Widget类,我们只需要关注在Widget窗口类中开发就行了。

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QButtonGroup>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;
};
#endif // WIDGET_H

我们创建对象的原则是:如果是需要一直在窗口页面上显示的控件就需要用new创建,Qt内置的控件都可以在创建时通过构造函数传参,来指定对象的父类(通常是this,也就是Widget,将对象挂到对象树上)。当对象挂到对象树上后,如果不释放是否会出现内存泄漏呢?不会!!!

挂到对象树上的对象生命周期会交给对象树来完成,我们不需要关心。

#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPushButton* button = new QPushButton(this/*指定父类,也就是Widget*/);
}Widget::~Widget()
{delete ui;
}

小结:本章主要讲述了,Qt5 框架中对象树的概念(比较浅,也只是以了解和使用的角度去讲)。对象树其实听起来是挺高级的,其实就是利用了面向对象的思想,将所有对象都继承自一个对象,再让这个主对象对所有的子对象进行统一管理释放。

如何将对象挂到对象树上?
如上操作:内置的控件指定一下自己的父类,把自己挂到对象树上就可以啦~。

相关文章:

Qt5 框架学习及应用 — 对象树

Qt 对象树 对象树概念Qt为什么使用对象树 &#xff1f;将对象挂到对象树上 对象树概念 对象树&#xff1a;对于树的概念&#xff0c;相信许多学过数据结构的同学应该都不会陌生。在学习数据结构的时候我们所接触的什么二叉树、多叉树、哈夫曼树、AVL树、再到红黑树、B/B树………...

Ansible自动化运维工具---Playbook

一、playbook playbook是剧本的意思 通过 task 调用 ansible 的模块将多个 play 组织在一 个playbook中运行。 playbook本身由以下各部分组成&#xff1a; Tasks: 任务&#xff0c;即调用模块完成的某操作Variables: 变量Templates: 模板Handlers: 处理器&#xff0c;当某条…...

什么是接口和类?Java中的集合框架有哪些主要接口和类?

Java中的集合框架有哪些主要接口和类&#xff1f; Java中的集合框架&#xff08;Java Collections Framework&#xff09;提供了一套丰富的接口和类&#xff0c;用于存储和操作对象的集合。以下是Java集合框架中的主要接口和类&#xff1a; 主要接口 Collection&#xff1a; 这…...

算法学习笔记(最短路——Bellman-Ford)

B e l l m a n — F o r d Bellman—Ford Bellman—Ford是一种单源最短路径算法&#xff0c;可以用于边权为负的图&#xff0c;但是只能用于小图。 大概过程&#xff1a; 枚举每一条边&#xff0c;更新可以更新的节点&#xff08;起点到自己距离为 0 0 0&#xff0c;从地点开…...

try-catch-finally的省略与springboot

在 Java 中&#xff0c;try-catch 块是用于捕获和处理异常的结构&#xff0c;它可以帮助您在代码中处理可能发生的异常情况。在某些情况下&#xff0c;您可能希望省略 try-catch 块并将异常向上抛出&#xff0c;让调用者处理异常。这种情况通常适用于以下情况&#xff1a; 方法…...

容器Docker:轻量级虚拟化技术解析

引言 随着云计算和虚拟化技术的飞速发展&#xff0c;容器技术以其轻量级、高效、可移植的特性&#xff0c;逐渐成为了软件开发和部署的新宠。在众多容器技术中&#xff0c;Docker以其简单易用、功能强大的特点&#xff0c;赢得了广泛的关注和应用。本文将全面介绍Docker的基本概…...

windows 系统中cuda 12.1 环境安装

文章目录 1. 安装cuda 12.11.1 下载1.2 安装 cuda1.2.1 安装步骤1.2.2 环境变量安装1.3 安装cuDNN1.3.1 安装1.3.2 cuDNN配置验证2. anaconda 安装2.1 安装2.2 环境变量配置3. 报错解决1. 安装cuda 12.1 首先通过nvidia-smi 查看可以安装的CUDA最高版本...

字节和旷视提出HiDiffusion,无需训练,只需要一行代码就可以提高 SD 生成图像的清晰度和生成速度。代码已开源。

字节和旷视提出HiDiffusion&#xff0c;无需训练&#xff0c;只需要一行代码就可以提高 SD 生成图像的清晰度和生成速度。代码已开源。 支持将图像生成的分辨率提高至40964096&#xff0c;同时将图像生成速度提升1.5至6倍。 支持所有 SD 模型同时也支持 SD 模型的下游模型&…...

linux下dd制作启动U盘

dd命令是比较推荐的一种Linux环境中制作U盘启动盘的方式&#xff0c;无需安装额外的工具&#xff0c;基本上所有Linux发行版都集成了这个命令。 1、插入U盘&#xff1b; 2、打开终端&#xff1b; 3、确认U盘路径&#xff0c;在终端中输入&#xff1a;sudo fdisk -l 例如&am…...

springboot整合mybatis配置多数据源(mysql/oracle)

目录 前言导入依赖坐标创建mysql/oracle数据源配置类MySQLDataSourceConfigOracleDataSourceConfig application.yml配置文件配置mysql/oracle数据源编写Mapper接口编写Book实体类编写测试类 前言 springboot整合mybatis配置多数据源&#xff0c;可以都是mysql数据源&#xff…...

练习项目后端代码解析切面篇(Aspect)

前言 之前注解篇时我说&#xff0c;通常情况下一个自定义注解一般对应一个切面&#xff0c;虽然项目里的切面和注解个数相同&#xff0c;但是好像有一个名字看起来并不对应&#xff0c;无所谓&#xff0c;先看了再说。 ExceptionLogAspect切面 我在里面做了具体注释&#x…...

TypeScript常见面试题第六节

题目二十六:TypeScript 中的装饰器? 一、讲解视频 TS面试题二十六:TypeScript 中的可选链? 二、题目解析 本题目考察可选链的相关知识,可选链是比较新的一个语法,是一种访问嵌套对象属性的安全的方式。即使中间的属性不存在,也不会出现错误。如果可选链 ?. 前面的值为…...

LeetCode 面试经典150题 228.汇总区间

题目&#xff1a; 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区…...

大数据分析入门10分钟快速了解SQL

SQL是什么&#xff1f; SQL全称Structured Query Language(结构化查询语言”) 为什么要用SQL&#xff1f; SQL通用 常见的表格分析操作&#xff0c;Excel也能做&#xff0c;为什么不用呢&#xff1f; 因为处理上亿行大数据时&#xff0c;Excel并不够用。 而常见的大数据引…...

设置多用户远程登录windows server服务器

##设置多用户远程登录windows server服务器 ###1、远程登录windows server 2016 运行—>mstsc—>远程IP地址—>用户和密码 2、远程windows服务器设置多用户策略 运行—>gpedit.msc->计算机配置—管理模板—windows组件—远程桌面服务—远程桌面会话主机----连…...

一文了解栈

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、栈是什么&#xff1f;二、栈的实现思路1.顺序表实现2.单链表实现3.双向链表实现 三、接口函数的实现1.栈的定义2.栈的初始化3.栈的销毁4.入栈5.出栈6.返回栈…...

C语言----汉诺塔问题

1.什么是汉诺塔问题 简单来说&#xff0c;就是有三个柱子&#xff0c;分别为A柱&#xff0c;B柱&#xff0c;C柱。其中A柱从上往下存放着从小到大的圆盘&#xff0c;我们需要借助B柱和C柱&#xff0c;将A柱上的所有圆盘转移到C柱上&#xff0c;并且一次只能移动一个圆盘&#…...

Python中驼峰命名法和下划线命名法相互转换的实战代码

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

【hackmyvm】vivifytech靶机

渗透思路 信息收集端口扫描端口服务信息目录扫描爆破hydra--sshgit提权 信息收集 ┌──(kali㉿kali)-[~] └─$ fping -ag 192.168.9.0/24 2>/dev/null 192.168.9.119 --主机 192.168.9.164 --靶机个人习惯&#xff0c;也方便后续操作&#xff0c;将IP地址赋值给一个变…...

纯血鸿蒙APP实战开发——手写绘制及保存图片

介绍 本示例使用drawing库的Pen和Path结合NodeContainer组件实现手写绘制功能。手写板上完成绘制后&#xff0c;通过调用image库的packToFile和packing接口将手写板的绘制内容保存为图片&#xff0c;并将图片文件保存在应用沙箱路径中。 效果图预览 使用说明 在虚线区域手写…...

手把手调优:如何榨干寒武纪MLU370系列卡的每一份算力?

寒武纪MLU370算力压榨实战&#xff1a;从芯片架构到BANG编程的深度调优指南 当一张价值数十万元的AI加速卡在数据中心里以30%的利用率运行时&#xff0c;每个周期都在烧掉本该属于企业的利润。寒武纪MLU370系列作为国产AI加速卡的代表作&#xff0c;其真实算力潜力往往被大多数…...

基于FONA808与Adafruit IO的实时GPS追踪系统实战

1. 项目概述与核心价值又到了一年一度的万圣节&#xff0c;孩子们最兴奋的“不给糖就捣蛋”活动即将上演。作为一个技术爱好者兼“鸡娃”家长&#xff0c;我每年都在琢磨怎么让这个传统活动变得更有趣、更高效。去年&#xff0c;我儿子抱怨说走了半天路&#xff0c;拿到的糖果却…...

Lingtrain Aligner:如何让多语言文本对齐变得像拼图一样简单?

Lingtrain Aligner&#xff1a;如何让多语言文本对齐变得像拼图一样简单&#xff1f; 【免费下载链接】lingtrain-aligner Lingtrain Aligner — ML powered library for the accurate texts alignment. 项目地址: https://gitcode.com/gh_mirrors/li/lingtrain-aligner …...

Thanos剪枝算法:高效压缩大型语言模型的技术解析

1. 项目概述&#xff1a;Thanos剪枝算法解析在深度学习领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;的参数量已突破千亿级别&#xff0c;这对计算资源和内存提出了极高要求。模型剪枝技术通过移除神经网络中的冗余连接&#xff0c;能在保持模型性能的同时显著降低…...

【免费下载】 MATLAB从入门到精通教程 - PDF文档下载指南【matlab下载】

MATLAB从入门到精通教程 - PDF文档下载指南 欢迎来到《MATLAB从入门到精通教程》的资源页面&#xff01;本资源旨在为所有想要深入学习MATLAB编程语言的学者和工程师提供一份详尽、全面的学习资料。这份权威的PDF文档是英文版&#xff0c;非常适合希望掌握MATLAB核心功能及高级…...

STM32F103C8T6多通道ADC轮询与DMA高效数据搬运实战

1. STM32F103C8T6多通道ADC采集基础 STM32F103C8T6这款性价比极高的Cortex-M3芯片内置了3个12位ADC模块&#xff0c;单个ADC最多支持16个外部通道和2个内部通道&#xff08;温度传感器和VREFINT&#xff09;。在实际项目中&#xff0c;比如需要同时监测多个传感器数据&#xf…...

基于合宙Air001的交互式地球名片:从硬件焊接、Arduino编程到触摸优化

1. 项目概述与核心思路最近在创客圈子里&#xff0c;合宙的Air001开发板可以说是火得一塌糊涂。包装设计得挺酷&#xff0c;价格更是香到没朋友&#xff0c;最关键的是它完美支持Arduino IDE开发&#xff0c;对于咱们这些习惯了Arduino生态的玩家来说&#xff0c;上手门槛几乎为…...

通过 curl 命令快速测试 Taotoken 各大模型 API 的连通性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过 curl 命令快速测试 Taotoken 各大模型 API 的连通性 在将大模型能力集成到应用或服务之前&#xff0c;验证 API 的连通性、密…...

别只改fillText了!深入Chromium渲染引擎,打造更隐蔽的Canvas指纹混淆方案

深入Chromium渲染引擎&#xff1a;构建自然化的Canvas指纹混淆体系 Canvas指纹识别技术早已从实验室走向实际应用&#xff0c;成为现代Web追踪的重要手段。传统对抗方案往往停留在简单的随机偏移或文本修改层面&#xff0c;这种"粗暴"的修改方式很容易被高级指纹库通…...

H5移动端拍照功能实战:从权限获取到图片上传的完整链路解析

1. 移动端H5拍照功能的核心实现逻辑 在移动端H5页面中实现拍照功能&#xff0c;本质上是通过浏览器API与设备硬件交互的过程。这个功能在在线身份验证、表单提交等场景中非常实用。我做过十几个类似的项目&#xff0c;发现最关键的环节集中在四个步骤&#xff1a;权限获取、视频…...