QT之对象父子关系

QT对象间可以存在父子关系:
1、每一个对象都保存有它所有子对象的指针
2、每一个对象都有一个指向其父对象的指针
其关系如下图所示:


当指定QT对象的父对象时,其父对象会在子对象链中表中会加入该对象的指针,该对象会保存指向其父对象的指针。
我们在QT中创建了3个 QObject 对象,我们让 c1、c2 的父对象指向 p,那么我们打印 c1 和 c2 的地址以及 p 的子对象链表里的地址。如下所示:

打印的结果如下:

事实证明了确实如我们所想的那样,QT对象间可以存在父子关系。
那么当Qt对象被销毁时,又会是怎样的情况呢?
1、将自己从父对象的 children list 移除
2、将自己的 children list 中的所有对象销毁
这时我们就要注意了,在销毁时可能会存在多次销毁的问题!
我们所讲的对象一定得是Qt对象,就是继承自QObject的或是QWidget的,不是随便的C++中的对象。
利用Qt对象间的父子关系可以构成对象树,删除树中的节点会导致对应的子树被销毁。
我们实现一个这样的树:

我们实现的代码如下:

得到的结果如下:

我们可以看到调用析构函数的有 obj3 和 obj4,因为 obj4 是 obj3 的子对象,所以 delete obj3 时,obj4 也被析构了。这时 obj1 的子对象链表里只有 obj2 一个对象了。
通过今天的实验,我们得知Qt对象间可以存在父子关系,并且通过父子关系可以得到Qt对象树;Qt对象销毁时解除和父对象间的父子关系,Qt对象销毁时将会销毁所有的子对象。好了,今天就先学到这里,后面我们继续学习Qt的相关知识。

        以上内容来自狄泰软件学院的QT教程,欢迎大家一起来学习,可以加我QQ:243343083,一起学习。狄泰技术交流群:199546072 

原文地址:http://blog.51cto.com/12810168/2092252

时间: 2024-08-04 23:22:36

QT之对象父子关系的相关文章

QT窗口组件的父子关系

部分图文参考狄泰软件学院相关内容 1.QT对象间可以存在父子关系 (1)每一个对象都保存有它所有子对象的指针 (2)每一个对象都有一个指向其父对象的指针 2.当指定QT对象的父对象时 (1)其父对象会在对象链表中加入该对象的指针 (2)该对象会保存指向父对象的指针 3.当QT对象被销毁时 (1)将自己父对象的Chidrea_ List移除 (2)将自己的Children List中所有对象销毁 (3)利用QT对象间的父子关系可以构成对象树 (4)删除书中的节点会导致对应子树被销毁 注意:使用QT

第16课 Qt对象间的父子关系

1. Qt对象间的关系 (1)Qt对象间可以存在父子关系 ①每一个对象都保存有它所有子对象的指针 ②每一个对象都有一个指向其父对象的指针 (2)当指定Qt对象的父对象时 ①其父对象会在子对象链表中加入该对象的指针 ②该对象会保存指向其父对象的指针 (3)当Qt对象被销毁时 ①将自己从父对象的Children List移除 ②将自己的Children List中的所有对象销毁 ▲使用Qt开发时,不仅要时刻注意内存泄露的问题,还要时刻关注对象是否可能被多次销毁的问题. [编程实验]对象间的父子关系

QObject提供了QMetaObject元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化

元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化其中元类又提供了:classInfo,className,构造函数,多重祖先元类,method, property, Enumerator, Signal, Slot等等 http://doc.qt.io/qt-5/qobject.html http://doc.qt.io/qt-5/qmetaobject.html 我感觉Qt的出现,除了提供GUI以外,主要就是提

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

Qt对象之间可以存在父子关系 继承于QObject类或者其子类的对象,都称为Qt对象 当指定Qt对象的父对象时 需要通过setParent()成员函数来设置对象间的父子关系 子对象将会把自己的指针地址保存在父对象的children List链表里(因为父对象可以拥有多个子对象) 子对象内部会有一个指向其父对象的指针,可以通过parent()成员函数查看 代码试验 需要用到的函数: void QObject::setParent ( QObject * parent ); //设置为parent对

NHibernate之旅(9):探索父子关系(一对多关系)

本节内容 引入 NHibernate中的集合类型 建立父子关系 父子关联映射 结语 引入 通过前几篇文章的介绍,基本上了解了NHibernate,但是在NHibernate中映射关系是NHibernate中的亮点,也是最难掌握的技术.从这篇开始学习这些东西,我将图文结合来说明这里奥秘的知识. 前几篇,我们的例子只使用了一个简单的Customer对象.但是在客户/订单/产品的经典组合中,他们的关系非常复杂?让我们先回顾在第二篇中建立的数据模型. 在图上,我已经清晰的标注了表之间的关系,首先分析Cu

[转]NHibernate之旅(9):探索父子关系(一对多关系)

本节内容 引入 NHibernate中的集合类型 建立父子关系 父子关联映射 结语 引入 通过前几篇文章的介绍,基本上了解了NHibernate,但是在NHibernate中映射关系是NHibernate中的亮点,也是最难掌握的技术.从这篇开始学习这些东西,我将图文结合来说明这里奥秘的知识. 前几篇,我们的例子只使用了一个简单的Customer对象.但是在客户/订单/产品的经典组合中,他们的关系非常复杂?让我们先回顾在第二篇中建立的数据模型. 在图上,我已经清晰的标注了表之间的关系,首先分析Cu

QT ui基础(一) QT dialog 及UI 关系

2016-09-17 19:41:20|  分类: QT QT ui基础(一)  QT dialog 及UI 关系 #ifndef MYWIDGET_H#define MYWIDGET_H #include <QWidget>//#include "mydialog.h"namespace Ui {    class MyWidget;}class MyDialog;class MyWidget : public QWidget{    Q_OBJECT public:  

什么是Qt元对象系统

Qt元对象系统,即meta object system(mos),提供了大家熟知的用于对象间信息传递的信号与槽机制,运行时类型信息和动态属性系统. mos基于三件法宝: 一是QObject类,是所有Qt对象的基类,可以很好的使用mos. 二是Q_OBJECT宏,在类private部分声明,用于激活mos特性,例如动态属性.信号与槽. 三是元对象编译器,即meta object compiler(moc),为QObject的派生类提供了必要的代码以实现mos特性.例如Example.h中声明了Ex

创建对象与对象依赖关系

创建对象 SpringIOC容器,是spring核心内容.作用: 创建对象 & 处理对象的依赖关系 IOC容器创建对象: 创建对象, 有几种方式: 1) 调用无参数构造器 在bean类中写入无参构造函数 public User() { // TODO Auto-generated constructor stub } xml配置文件 <!-- 1.默认无参的构造器 --> <bean id="user1" class="com.gqx.create.