Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27934
  • 博文数量: 28
  • 博客积分: 280
  • 博客等级: 二等列兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-14 11:07
文章分类
文章存档

2015年(22)

2008年(6)

我的朋友
最近访客

分类: LINUX

2015-10-12 17:27:19

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》专栏文章是()原创技术文章。
本系列专栏文章可随意转载,但必须保留本段声明和每一篇文章的原始地址。
作者保留版权,未经作者同意,不得用于任何商业用途

《Inside Qt Series》专栏文章总索引:
本文原始地址:

阅读(363) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~