【Qt】重新认识QObject

1、QObject父子对象的是设计模式中组合模式的实现。父对象和基对象不是一个概念,前者是在运行时管理子对象,是动态的,后者是在编译时判定派生关系,是静态的。
2、每个QObject至多有一个父对象,父对象中将子对象的指针放在QObjectList列表中来管理。在父对象的析构函数中会自动销毁子对象,因此有父对象的QObject应该new出来放到堆区(heap),没有父对象的QObject最好放到栈区,这样在超出作用域时,会自动销毁。如果有父对象的QObject在栈上创建,就会销毁两次
3、不允许复制QObject,源码中有Q_DISABLE_COPY(QObject),其实就是将复制构造函数和赋值构造函数设置为private私有类型。因此QObject不能值传递,它不是值类型(带有公关默认构造、复制、赋值构造函数可以视为值类型)。
4、QObject之间可以使用信号和槽传递消息,底层依赖事件循环,这种设计模式称为观察者模式
5、注意:在实现多继承时,要确保QObject是基类列表中的第一个基类,基类列表有且只有这一个是QObject。这是由moc编译器限制的。
6、确保每一个QObject在QApplication之后创建,在QApplication销毁前销毁。而在静态存储区定义的对象是在main()返回后才销毁,因此不能定义静态存储类型的QObject
7、推荐使用QObject::deleteLater来删除QObject,但是也会因为延迟销毁对象,造成内存不会及时释放,占用大量内存。
8、信号和槽、元对象、元属性、元方法需要Q_OBJECT元对象编辑器moc支持。

发布了324 篇原创文章 · 获赞 266 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/u010168781/article/details/104724305