QT之对象父子关系(十三)-创新互联

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

QT之对象父子关系(十三)
当指定QT对象的父对象时,其父对象会在子对象链中表中会加入该对象的指针,该对象会保存指向其父对象的指针。
我们在QT中创建了3个 QObject 对象,我们让 c1、c2 的父对象指向 p,那么我们打印 c1 和 c2 的地址以及 p 的子对象链表里的地址。如下所示:
QT之对象父子关系(十三)
打印的结果如下:
QT之对象父子关系(十三)
事实证明了确实如我们所想的那样,QT对象间可以存在父子关系。
那么当Qt对象被销毁时,又会是怎样的情况呢?
1、将自己从父对象的 children list 移除
2、将自己的 children list 中的所有对象销毁
这时我们就要注意了,在销毁时可能会存在多次销毁的问题!
我们所讲的对象一定得是Qt对象,就是继承自QObject的或是QWidget的,不是随便的C++中的对象。
利用Qt对象间的父子关系可以构成对象树,删除树中的节点会导致对应的子树被销毁。
我们实现一个这样的树:
QT之对象父子关系(十三)
我们实现的代码如下:
QT之对象父子关系(十三)
得到的结果如下:
QT之对象父子关系(十三)
我们可以看到调用析构函数的有 obj3 和 obj4,因为 obj4 是 obj3 的子对象,所以 delete obj3 时,obj4 也被析构了。这时 obj1 的子对象链表里只有 obj2 一个对象了。
通过今天的实验,我们得知Qt对象间可以存在父子关系,并且通过父子关系可以得到Qt对象树;Qt对象销毁时解除和父对象间的父子关系,Qt对象销毁时将会销毁所有的子对象。好了,今天就先学到这里,后面我们继续学习Qt的相关知识。

在邻水等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、成都网站设计 网站设计制作按需策划,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站,成都外贸网站建设公司,邻水网站建设费用合理。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站题目:QT之对象父子关系(十三)-创新互联
文章网址:http://myzitong.com/article/dhosph.html