第十六课、Qt对象间的父子关系------------------狄泰软件学院
生活随笔
收集整理的這篇文章主要介紹了
第十六课、Qt对象间的父子关系------------------狄泰软件学院
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、Qt對象間的關系
1、Qt對象間可以存在父子關系
(1)、每個對象都保存有它所有子對象的指針
(2)、每一個對象都有一個指向其父對象的指針
2、當指定Qt對象的父對象時
(1)、其父對象會在子對象鏈表中加入該對象的指針
(2)、該對象會保存指向其父對象的指針
#include <QtCore/QCoreApplication> #include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QObject* p = new QObject();QObject* c1 = new QObject();QObject* c2 = new QObject();c1->setParent(p);c2->setParent(p);qDebug() << c1;qDebug() << c2;const QObjectList list = p->children();for(int i=0; i<list.length(); i++){qDebug() << list[i];//打印的兩個分別與c1和c2一樣 }qDebug() << c1->parent();qDebug() << c2->parent();qDebug() << p;//三個打印的值都一樣return a.exec(); } View Code
3、當對象被銷毀時
(1)、將自己從父對象的Children List移除
(2)、將自己的Children List中的所有對象銷毀
注:使用Qt開發時,不僅要時刻注意內存泄漏的問題,還要時刻關注對象是否可能被多次銷毀的問題
4、對象樹
(1)、利用Qt對象間的父子關系可以構成對象樹
(2)、刪除樹中的節點時會導致對應的子樹被銷毀
#include <QtCore/QCoreApplication> #include <QDebug> class MObj : public QObject//Qt對象采用父子間的關系 {QString m_name; public:MObj(const QString& name){m_name = name;qDebug() << "Constructor: " << m_name;}~MObj(){qDebug() << "Destructor: " << m_name;} };void delTest() {MObj* obj1 = new MObj("obj1");MObj* obj2 = new MObj("obj2");MObj* obj3 = new MObj("obj3");MObj* obj4 = new MObj("obj4");//調用四次構造函數 obj2->setParent(obj1);obj3->setParent(obj1);obj4->setParent(obj3);delete obj3;//會同時銷毀obj3和obj4// delete obj4;//運行會發生錯誤,相當于對obj4銷毀了兩次const QObjectList& list = obj1->children();qDebug() << "obj2: " << obj2;for(int i=0; i<list.length(); i++){qDebug() << list[i];}}int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);delTest();return a.exec(); } View Code
二、小結
(1)、Qt對象間可以存在父子關系
(2)、通過父子關系能夠獲得Qt對象樹
(3)、Qt對象銷毀時解除和父對象間的父子關系
(4)、Qt對象銷毀時將同時銷毀所有的子對象
轉載于:https://www.cnblogs.com/gui-lin/p/6399250.html
總結
以上是生活随笔為你收集整理的第十六课、Qt对象间的父子关系------------------狄泰软件学院的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WIFI万能钥匙
- 下一篇: ES6—类的实现原理