Qt对象树

一、什么是对象树

Qt中的对象树就是Qt中对象间的父子关系,每一个对象都有它所有子对象的指针,都有一个指向其父

二、示例

1.创建一个MyPushButton对象,继承QPushButton

 

2.在mypushbutton.cpp中对MyPushButton对象的构造和析构函数添加消息

#include "mypushbutton.h"

#include<QDebug>

MyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent)

{

     qDebug()<<"MyPushButton构造调用";

}

 MyPushButton::~MyPushButton()

{

       qDebug()<<"MyPushButton析构";

}

3.在主窗口创建MyPushButton按钮的实例

#include "mainwindow.h"

#include<QPushButton>

#include"mypushbutton.h"

#include<QtDebug>

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)

{

MyPushButton *mybtn=new MyPushButton;

mybtn->resize(120,50);

mybtn->setText("MyPushButton");

mybtn->move(200,0); mybtn->setParent(this);

}

MainWindow::~MainWindow()

{

}

 

4.在mainwindow.cpp中的MainWindow的析构函数里添加消息

MainWindow::~MainWindow()

{

qDebug()<<"mainwindow析构";

}

5.关闭主窗口,查看各对象析构的顺序

MyPushButton构造调用 mainwindow析构

//此时只是走到析构函数里打印了mainwindow析构,

mainwindow还没有被析构掉 MyPushButton析构

6.正确的顺序应该是:关闭主窗口时,主窗口的析构函数被调用,然后主窗口会看自己有没有子对象,有的话先把他们析构了,最后再把自己析构。

对象的指针。当创建对象在堆区时,如果指定的父亲是QObject派生下来的类或者是QObject的子类派生下来的类,当父对象被析构时子对象也会被析构。

7.Qt提供了对象树机制,能够自动、有效的组织和管理继承自QObject的Qt对象。
每个继承自QObject类的对象通过它的对象链表(QObjectList)来管理子类对象,当用户创建一个子对象时,其对象链表相应更新子类对象信息,对象链表可通过children()获取。
当父对象析构的时候,其对象链表中的所有(子)对象也会被析构,父对象会自动将其从父对象列表中删除。Qt 保证没有对象会被 delete 两次。开发中手动回收资源时建议使用deleteLater代替delete,因deleteLater多次是安全的,而delete多次是不安全的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个月太忙没时间看C++

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值