ylww

随笔仅作学习记录,请辩证参考!!!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

正常来讲,使用指针来指向一个new的对象的时候,需要自己手动delete这个指针,来释放空间。delete对象指针时,会自动调用此对象的析构函数。

 

对此很不方便(手动delete),在Qt中用了对象树机制:

每个继承自QObject类的对象通过它的对象链表(QObjectList)来管理子类对象,当用户创建一个子对象时,其对象链表相应更新子类对象信息,对象链表可通过children()获取。

当父对象析构的时候,其对象链表中的所有(子)对象也会被析构,父对象会自动将其从父对象列表中删除。

 

学习过程中有三点总结:

1.普通部件的父亲不能是布局管理器,若布局管理器对部件进行布局时,布局管理器的父类(不能是布局管理器)会作部件的父类,当有其他对象调用此布局时,会重新改变布局管理器与部件的父类。(正常,无提示信息)

 布局管理器的父类可以是布局管理器,当由对象调用时,布局管理器的父类还是布局管理器。当被其他对象调用时,布局管理器的父类还是布局管理器,它的部件父类是其他对象。

(正常,无提示信息)

 

2.一个窗口中的按钮被点击时,它的子窗口弹出的情况下,子窗口的部件的父类就是子窗口,父子关系向树一样有层级。

 

3.我们自定义一个继承自QObject的类时,析构函数可以不写的原因是:当此类用于主窗口时,直接用类名定义一个变量,当程序结束时,自动析构。问题是此类的对象调用的析构函数是合成的,

若是其中有new的部件对象该当如何?解释是,这些部件可以指定主窗口为父类,当父类对象析构的时候,子类对象由于对象树机制,也会跟着析构。同样的,若此类采取new形式定义,可以让此类

指定父窗口。

posted on 2023-01-16 22:08  理想主义者光芒万丈  阅读(133)  评论(0)    收藏  举报