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对象。