zoukankan      html  css  js  c++  java
  • Qt 对象间的父子关系

    Qt对象间可以存在父子关系:

      ——每个对象都保存有它所有子对象的指针

      ——每个对象都有一个其父对象的指针

     当指定Qt对象的父对象时:

      ——其父对象会在自己的子对象链表中加入该对象的指针

      ——该子对象会保存其父对象的指针

      实验代码:

      1、通过创建三个QObject 对象 p c1 c2  

      2、p 作为c1 c2的父对象

      3、打印c1 c2 的地址

      4、打印 p对象的子对象地址

      5、打印 c1 c2 对象的父对象地址

       6、比较证明上述结论

    void testObjFunction(void)
    {
        QObject* p = new QObject();
        QObject* c1 = new QObject();
        QObject* c2 = new QObject();
    
        c1->setParent(p);//设置c1 的父对象为p
        c2->setParent(p);//设置c2 的父对象为p
        qDebug() <<"c1"<< c1;
        qDebug() <<"c2"<< c2;
       const QObjectList&   List = p->children();//获取子对象表
        for(int i=0;i<List.length();i++)
        {
            qDebug()<<List[i];
        }
         qDebug();
        qDebug()<<"p"<<p;
    
        qDebug()<<"c1 parent"<<c1->parent();
        qDebug()<<"c2 parent"<<c2->parent();
    }

    运行结果:

      

    当Qt对象被销毁时:

     ——将自己从父对象的 Children List中移除

     ——在销毁自己时,将自己的 Childre List 中所有对象销毁

      所以在开发是需要注意,内存泄漏与多次销毁的问题。

    测试代码:

      1、创建obj1 obj2 obj3 obj4

      2、删除 obj3

       3、打印obj1 中的 Children List  与obj2地址是否相等

    void testObjFunction1()
    {
        qDebug();
        MObj* obj1 = new MObj("obj1");
        MObj* obj2 = new MObj("obj2");
        MObj* obj3 = new MObj("obj3");
        MObj* obj4 = new MObj("obj4");
    
        obj2->setParent(obj1);//obj2 的父对象是obj1
        obj3->setParent(obj2);//obj3 的父对象是obj2
        obj4->setParent(obj3);//obj4 的父对象是obj3
        QObjectList List1 = obj1->children();
    
        delete obj3;
        QObjectList List = obj2->children();
        qDebug()<<"obj2"<<obj2;
        for(int i=0;i<List.length();i++)
        {
            qDebug()<<List[i];
        }
    }

    运行结果:

      

    小结:

      Qt对象间可以存在父子关系

      通过父子关系能够得到qt对象树

      Qt对象销毁时解除和父对象的父子关系

      Qt对象销毁时将同时销毁所有的子对象

  • 相关阅读:
    BZOJ 2527 Meteors 整体二分
    BZOJ 1176: [Balkan2007]Mokia
    DP杂题2
    点分治
    一些图论模板
    一些字符串的题
    斐波那契+线段树
    BZOJ 2957楼房重建
    POJ
    BZOJ 2002 弹飞绵羊
  • 原文地址:https://www.cnblogs.com/hjxzjp/p/12260133.html
Copyright © 2011-2022 走看看