1. 程式人生 > 實用技巧 >QT 物件樹

QT 物件樹

一、什麼是物件樹

QT中的物件樹就是QT中物件間的父子關係,每一個物件都有它所有子物件的指標,都有一個指向其父物件的指標。當建立物件在堆區時,如果指定的父親是QObject派生下來的類或者是QObject的子類派生下來的類,當父物件被析構時子物件也會被析構。

二、示例

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.正確的順序應該是:關閉主視窗時,主視窗的解構函式被呼叫,然後主視窗會看自己有沒有子物件,有的話先把他們析構了,最後再把自己析構。