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

QT:对象树

1.概念

Qt 中的对象树是一种以树形结构组织 Qt 对象的方式。当创建一个QObject(Qt 中大多数类的基类)或其派生类的对象时,可以为其指定一个父对象(parent)。这个对象就会被添加到其父对象的子对象列表中,形成一个树形结构。当父对象被销毁时,它会自动销毁其所有的子对象。

对象树是qt内存管理的核心机制,非常的重要。

正常在C++编程中,new出来的对象,一定要使用delete进行销毁,不然会引发内存泄漏的问题,但是有了目录树,在创建对象的时候,将对象挂到父对象上,在合适的时机父对象销毁了,父对象会将下面所有的子对象全部都销毁。

什么是合适的时机呢?例如将窗口×掉等。

qt中的目录树是一棵N叉树。

2.演示

#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    /
    QLabel* label = new QLabel(this);
    label->setText("hello world");
    label->move(300,300);
    
}

Widget::~Widget()
{
    delete ui;
}

在widget的构造函数创建了一个label对象,QLabel(this) ,就相当与把label这个对象挂到widget这个树上去。

当点×的时候,widget生命周期结束,label自然被释放。

3.注意

在创建对象的时候,建议都使用new在堆上创建变量,而不是直接在栈上定义变量。

就像这样在执行完构造函数之后,label对象被销毁,自然窗口中不会显示label对象。


http://www.kler.cn/a/534044.html

相关文章:

  • 使用Python和TensorFlow/Keras构建一个简单的CNN模型来识别手写数字
  • 2024美团春招硬件开发笔试真题及答案解析
  • QT:对象树
  • 【含文档+PPT+源码】基于Python爬虫二手房价格预测与可视化系统的设计与实现
  • 用python实现进度条
  • 【信息系统项目管理师】第17章:项目干系人管理过程详解
  • 前端在DeepSeek中提问的典型模板
  • RTMP 和 WebRTC
  • 【大数据技术】搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn)
  • 实现动态卡通笑脸的着色器实现
  • 生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (上)
  • Vue Router 客户端路由解决方案:axios 响应拦截(跳转到登录页面)
  • Redis --- 使用zset处理排行榜和计数问题
  • llama_index
  • 蓝桥杯备赛题目练习(一)
  • useEffect和useLayoutEffect有什么区别
  • LeetCode题练习与总结:在二叉树中增加一行--623
  • 手写MVVM框架-模板渲染2
  • Unity中的虚拟相机(Cinemachine)
  • websocket 实现前后端通信
  • CG-35 总辐射传感器 铝合金材质
  • XML 元素 vs. 属性
  • 蓝桥杯思维训练营(四)
  • C_位运算符及其在单片机寄存器的操作
  • Windows图形界面(GUI)-QT-C/C++ - Qt Combo Box
  • MyBatis中的#{}与${}的区别和应用详解