一、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对象间的父子关系------------------狄泰软件学院相关推荐

  1. 第五十二课、命令行参数的应用------------------狄泰软件学院

    一.主窗口的状态参数 1.主窗口的状态参数 (1).应用程序必须保存和恢复主窗口的状态参数(位置.大小等) 2.应用程序退出的过程 (1).收到关闭事件 (2).执行关闭事件处理函数 (3).主窗口从 ...

  2. 第二十九课、主窗口中的状态栏------------------狄泰软件学院

    一.主窗口中的状态栏 1.状态栏的概念和意义 (1).状态栏是应用程序中输出简要信息的区域 (2).状态栏一般位于主窗口的最底部 (3).状态栏中的消息类型 A.实时消息:如当前程序状态 B.永久消息 ...

  3. 7.QT-Qt对象间的父子关系

    Qt对象之间可以存在父子关系 继承于QObject类或者其子类的对象,都称为Qt对象 当指定Qt对象的父对象时 需要通过setParent()成员函数来设置对象间的父子关系 子对象将会把自己的指针地址 ...

  4. JAVA学习第四十六课 — 其它对象API(二)Date类 amp; Calendar类(重点掌握)

    Date类(重点) 开发时,会时常遇见时间显示的情况,所以必须熟练Date的应用 <span style="font-family:KaiTi_GB2312;font-size:18p ...

  5. 第十三课、类族的结构进化-------------------狄泰软件学院

    一.遵循经典设计原则 DTLib中的所有类位于单一继承树 IvalidOperationEXception是新增的异常类,描述某些成员函数在状态不对的时候被抛出 二.改进的关键点 1.EXceptio ...

  6. OpenGL教程翻译 第二十六课 法线纹理

    第二十六课 法线纹理 背景 我们之前使用的光照技术还算不错,光线在模型表面得到了很好的插值,为场景营造出真实感.但是这种效果还能够有非常大的提升.事实上,我们以前使用的这种插值方式在某种程度上来说是对 ...

  7. OpenGL(十六)——Qt OpenGL融合(将两张图片叠合成一张图片)

    OpenGL(十六)--Qt OpenGL融合(将两张图片叠合成一张图片) 一.场景 在常用的项目场景中,我们经常会遇到将两个图片合在一起变成一张图片,这时候就会有前后之分,特别是两个物体合在一起的时 ...

  8. NeHe OpenGL教程 第三十六课:从渲染到纹理

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  9. NeHe OpenGL第四十六课:全屏反走样

    NeHe OpenGL第四十六课:全屏反走样 全屏反走样 当今显卡的强大功能,你几乎什么都不用做,只需要在创建窗口的时候该一个数据.看看吧,驱动程序为你做完了一切.   在图形的绘制中,直线的走样是非 ...

最新文章

  1. 【干货】CNN与Transformer的强强联合!谷歌最新开源BoTNet,ImageNet达84.7%准确率
  2. Node中require方法的简单实现
  3. 2019研究生数学建模比赛题目
  4. 2015 11月30日 一周工作计划与执行
  5. 汽车电子专业知识篇(十六)-整车电气系统设计——高压系统框架略读
  6. css如何实现一个小三角形,用纯css写一个常见的小三角形
  7. pandas DataFrame数据筛选和切片
  8. java后台 ajax_ajax提交到java后台之后处理数据的实现
  9. VS编译器的使用——VS2019新建控制台工程
  10. 自定义填充图案插件 cad_CAD填充技巧:填充图案
  11. 使用pyecharts绘制图表
  12. 医号馆诊所管理软件系统更新,新增人脸识别、处置单等功能!
  13. 单片机驱动DM9000
  14. 数商云渠道分销管理系统方案:分销渠道系统趋势、作用、功能、业务场景
  15. Grid++用程序定义报表模板(官方例子)
  16. 在PS中如何设计个人logo
  17. Python利用hadoop Streaming编写的Map-Reduce程序命令运行和本地调试运行
  18. 古老CPU启示录-意义重大的8008 芯片
  19. 房价下跌的“理由”越来越多
  20. 爬虫重试模块retry,自动重试

热门文章

  1. ue编辑器拖拽上传图片_editor.md实现拖拽剪切复制粘贴上传图片,文件插件
  2. php任务队列有什么优势,PHP使用任务队列这个词的含义,到底什么是任务队列
  3. Mysql日期和时间函数大全
  4. Java:使用Executors创建和管理线程
  5. linux cut的用法
  6. HDU-1028 Ignatius and the Princess III(生成函数)
  7. C# Windows服务相关
  8. Microsoft SQL Server Version List 版本列表
  9. Masonry('couldn't find a common superview for)
  10. 11gOCP 1z0-052 :2013-09-11 MGR_ROLE role........................................................A66