QT 物件樹
阿新 • • 發佈:2020-12-19
一、什麼是物件樹
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.正確的順序應該是:關閉主視窗時,主視窗的解構函式被呼叫,然後主視窗會看自己有沒有子物件,有的話先把他們析構了,最後再把自己析構。