一、什么是对象树
就相当在一个树上不断的生长新的枝丫。
构造: 就是从上往下,从树根(QObject)往下构造。
析构: 就是从下网上,从构造的对象往树根上析构。
二、如何去构造一个对象树
2.1、添加文件
等你添加好了过后,系统这边自动就会帮你生成一些文件。
2.2、配置文件
(1)修改头文件
MyButton.h
这是系统生成的,我们现是自己创建了一myButton,刚才是创了一个myWidget,所以我们再这里直接把myWidget换成myButton就好了。因为现在MyButton是一个QObject的子类而不是QWidget的子类,所以记得换头文件。
#ifndef MYBUTTON_H
#define MYBUTTON_H
#include <QPushButton> //换头文件,#include <QWidget>
class MyButton : public QPushButton
{
Q_OBJECT
public:
explicit MyButton(QWidget *parent = 0);
~MyButton();
public slots:
};
#endif // MYBUTTON_H
(2)配置mybutton.cpp文件
#include "mybutton.h"
#include <QDebug>
MyButton::MyButton(QWidget *parent) : QPushButton(parent)
{
}
MyButton::~MyButton()
{
qDebug() << "MyButton的析构调";
}
同样的道理,这里把myWidget换成myButton就好了。因为后面加了一个打印qDebug,所以这里要加一个头文件#include 。
#include "mywidget.h"
#include <QPushbutton>
#include "mybutton.h"
#include <QDebug>
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
{
//定一个按钮 //本来没有嘛,我们直接new一个
QPushButton *btn = new QPushButton;
//通过show显示
//btn -> show();
//让对象依赖在我的窗口上
btn -> setParent(this);
//写字
btn -> setText("我的第一个按钮");
//第二种方法创建按钮
QPushButton *btn2 = new QPushButton("第二个按钮",this);
//移动btn2
btn2 -> move(200,200);
//定义从窗口大小
resize(600,400);
//设置窗口的标题
setWindowTitle("我的窗口");
//固定窗口的大小
setFixedSize(600,400);
//自定义创建窗口
MyButton *mybtn = new MyButton;
mybtn->setText("我的按钮");
mybtn->move(100,100);
mybtn->setParent(this);
}
myWidget::~myWidget()
{
qDebug()<<"MyWidget的析构调用";
}
这里直接把几个窗口显示出来
三、析构详解
然后关闭窗口可以看到这样一段打印的话
简单来说,在Qt里面有我们杀死他的父亲的时候,父亲也会杀死自己的孩子,所以我们New了一个对象向过后,如果在父类里面,他会自动进行释放(析构函数调用),就想这里一样,如果没有在父类里面我们则需要手动释放(delete),后面再说。