Inside Qt Series (一):Let’s go, Starting From the QObject
2012-09-10 10:59
543 查看
QObject 这个 class 是 QT 对象模型的核心,绝大部分的 QT 类都是从这个类继承而来。这个模型的中心特征就是一个叫做信号和槽(signal and slot)的机制来实现对象间的通讯,你可以把一个信号和另一个槽通过 connect(…) 方法连接起来,并可以使用 disconnect(…) 方法来断开这种连接,你还可以通过调用 blockSignal(…) 这个方法来临时的阻塞信号,
QObject 把它们自己组织在对象树中。当你创建一个 QObject 并使用其它对象作为父对象时,这个对象会自动添加到父对象的 children() list 中。父对象拥有这个对象,比如,它将在它的析构函数中自动删除它所有的 child 对象。你可以通过 findChild() 或者 findChildren()函数来查找一个对象。
每个对象都有一个对象名称(objectName())和类名称(class name), 他们都可以通过相应的 metaObject 对象来获得。你还可以通过 inherits() 方法来判断一个对象的类是不是从另一个类继承而来。
当对象被删除时,它发出destroyed()信号。你可以捕获这个信号来避免对QObject的无效引用。
QObject可以通过event()接收事件并且过滤其它对象的事件。详细情况请参考installEventFilter()和 eventFilter()。
对于每一个实现了信号、槽和属性的对象来说,Q_OBJECT 宏都是必须要加上的。
QObject 实现了这么多功能,那么,它是如何做到的呢?让我们通过它的 Source Code 来解开这个秘密吧。
QObject 类的实现文件一共有四个:
* qobject.h,QObject class 的基本定义,也是我们一般定义一个类的头文件
* qobject.cpp,QObject class 的实现代码基本上都在这个文件
* qobjectdefs.h,这个文件中最重要的东西就是定义了 QMetaObject class,这个class是为了实现 signal、slot、properties,的核心部分。
* qobject_p.h,这个文件中的 code 是辅助实现 QObject class 的,这里面最重要的东西是定义了一个 QObjectPrivate 类来存储 QOjbect 对象的成员数据。
理解这个 QObjectPrivate class 又是我们理解 QT kernel source code 的基础,这个对象包含了每一个 QT 对象中的数据成员,好了,让我们首先从理解 QObject 的数据存储代码开始我么的 QT Kernel Source Code 之旅。
敬请关注下一节:QObject 对象数据存储
====================================
声明:
《Inside Qt Series》专栏文章是Qt核心技术论坛(InsideQt.com)原创技术文章。
本系列专栏文章可随意转载,但必须保留本段声明和每一篇文章的原始地址。
作者保留版权,未经作者同意,不得用于任何商业
QObject 把它们自己组织在对象树中。当你创建一个 QObject 并使用其它对象作为父对象时,这个对象会自动添加到父对象的 children() list 中。父对象拥有这个对象,比如,它将在它的析构函数中自动删除它所有的 child 对象。你可以通过 findChild() 或者 findChildren()函数来查找一个对象。
每个对象都有一个对象名称(objectName())和类名称(class name), 他们都可以通过相应的 metaObject 对象来获得。你还可以通过 inherits() 方法来判断一个对象的类是不是从另一个类继承而来。
当对象被删除时,它发出destroyed()信号。你可以捕获这个信号来避免对QObject的无效引用。
QObject可以通过event()接收事件并且过滤其它对象的事件。详细情况请参考installEventFilter()和 eventFilter()。
对于每一个实现了信号、槽和属性的对象来说,Q_OBJECT 宏都是必须要加上的。
QObject 实现了这么多功能,那么,它是如何做到的呢?让我们通过它的 Source Code 来解开这个秘密吧。
QObject 类的实现文件一共有四个:
* qobject.h,QObject class 的基本定义,也是我们一般定义一个类的头文件
* qobject.cpp,QObject class 的实现代码基本上都在这个文件
* qobjectdefs.h,这个文件中最重要的东西就是定义了 QMetaObject class,这个class是为了实现 signal、slot、properties,的核心部分。
* qobject_p.h,这个文件中的 code 是辅助实现 QObject class 的,这里面最重要的东西是定义了一个 QObjectPrivate 类来存储 QOjbect 对象的成员数据。
理解这个 QObjectPrivate class 又是我们理解 QT kernel source code 的基础,这个对象包含了每一个 QT 对象中的数据成员,好了,让我们首先从理解 QObject 的数据存储代码开始我么的 QT Kernel Source Code 之旅。
敬请关注下一节:QObject 对象数据存储
====================================
声明:
《Inside Qt Series》专栏文章是Qt核心技术论坛(InsideQt.com)原创技术文章。
本系列专栏文章可随意转载,但必须保留本段声明和每一篇文章的原始地址。
作者保留版权,未经作者同意,不得用于任何商业
相关文章推荐
- Inside Qt Series (一):Let’s go, Starting From the QObject
- Inside QT Series (一):Let’s go, Starting From the QObject
- Inside Qt Series (一):Starting From the QObject
- Inside Qt Series (一):Let’s go, Starting From the QObject
- Inside Qt Series (一):Starting From the QObject
- Inside Qt Series (一):Starting From the QObject
- Inside Qt Series (一):Starting From the QObject
- Howto let the SAX parser determine the encoding from the xml declaration?
- The Transition from Qt 4.x to Qt 5, the compatibility of QT, the solution to some error of header in
- The Transition from Qt 4.x to Qt 5
- Inside QT Series 序
- VIP does not relocate back to the original node starting from 10.2.0.4 and 11.1 even after the publi
- The Annotated Qt之QObject分析(1)
- Inside Qt Series (五):元对象系统(Meta-Object System)
- Should I design my classes from the outside (interfaces first) or from the inside (data first)?
- The Transition from Qt 4.x to Qt 5
- This document cannot be displayed while offline. To go online, uncheck Work Offline from the File me
- Inside Qt Series (三):对象数据存储(B)
- Inside QT Series (四):对象数据存储(C)
- Inside QT Series (六):元对象编译器 - Meta Object Compiler (moc)