对象树
- 当创建对象在堆区的时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,对象会放到对象树中
- 一定程度上简化了内存回收机制
- 在qt中,尽量在构造的时候就指定parent对象,并且大胆在堆上创建
mypushbutton.h
#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H
#include <QPushButton>
class Mypushbutton : public QPushButton //父类为QPushButton
{
Q_OBJECT
public:
explicit Mypushbutton(QWidget *parent = nullptr);
~Mypushbutton(); //析构函数
signals:
public slots:
};
#endif // MYPUSHBUTTON_H
mypushbutton.cpp
#include "mypushbutton.h"
#include<QDebug>
Mypushbutton::Mypushbutton(QWidget *parent) : QPushButton(parent) //父类为QPushButton
{
qDebug() <<"constructor"<<endl;
}
Mypushbutton::~Mypushbutton(){
qDebug() <<"destructor"<<endl;
}
widget.cpp
#include "widget.h"
#include<QPushButton>
#include "mypushbutton.h"
#include<QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//创建一个按钮
QPushButton *btn = new QPushButton;
//show以顶层方式弹出窗口控件
btn->show();
//让btn对象依赖在Widget窗口中
btn->setParent(this);
//显示按钮文字
btn->setText("The first Button!");
//创建第二个按钮,直接在构造函数里加上按钮信息和父类
QPushButton *btn2 = new QPushButton("The second button!",this);
//移动按钮位置
btn2->move(100,100);
btn->move(50,50);
//设置窗口大小
resize(600,400);
//设置窗口名称
setWindowTitle("The first windows");
setFixedSize(600,600);
//新建一个自己的按钮对象
Mypushbutton *my = new Mypushbutton;
my->setText("我的按钮");
my->setParent(this); //设置到对象树中
}
Widget::~Widget()
{
qDebug()<<"widget析构调用";
}