正常来讲,使用指针来指向一个new的对象的时候,需要自己手动delete这个指针,来释放空间。delete对象指针时,会自动调用此对象的析构函数。
对此很不方便(手动delete),在Qt中用了对象树机制:
每个继承自QObject类的对象通过它的对象链表(QObjectList)来管理子类对象,当用户创建一个子对象时,其对象链表相应更新子类对象信息,对象链表可通过children()获取。
当父对象析构的时候,其对象链表中的所有(子)对象也会被析构,父对象会自动将其从父对象列表中删除。
学习过程中有三点总结:
1.普通部件的父亲不能是布局管理器,若布局管理器对部件进行布局时,布局管理器的父类(不能是布局管理器)会作部件的父类,当有其他对象调用此布局时,会重新改变布局管理器与部件的父类。(正常,无提示信息)
布局管理器的父类可以是布局管理器,当由对象调用时,布局管理器的父类还是布局管理器。当被其他对象调用时,布局管理器的父类还是布局管理器,它的部件父类是其他对象。
(正常,无提示信息)
2.一个窗口中的按钮被点击时,它的子窗口弹出的情况下,子窗口的部件的父类就是子窗口,父子关系向树一样有层级。
3.我们自定义一个继承自QObject的类时,析构函数可以不写的原因是:当此类用于主窗口时,直接用类名定义一个变量,当程序结束时,自动析构。问题是此类的对象调用的析构函数是合成的,
若是其中有new的部件对象该当如何?解释是,这些部件都要指定主窗口为父类,当父类对象析构的时候,子类对象由于对象树机制,也会跟着析构。同样的,若此类采取new形式定义,可以让此类
指定父窗口。
标签:管理器,Qt,对象,布局,部件,析构,机制,父类 From: https://www.cnblogs.com/ylww/p/17056422.html