欢迎来到天天文库
浏览记录
ID:33413912
大小:121.00 KB
页数:17页
时间:2019-02-25
《qt信号和槽机制分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、一:Let’sgo,StartingFromtheQObjectQObject这个class是QT对象模型的核心,绝大部分的QT类都是从这个类继承而来。这个模型的中心特征就是一个叫做信号和槽(signalandslot)的机制来实现对象间的通讯,你可以把一个信号和另一个槽通过connect(…)方法连接起来,并可以使用disconnect(…)方法来断开这种连接,你还可以通过调用blockSignal(…)这个方法来临时的阻塞信号. QObject把它们自己组织在对象树中。当你创建一个QObject并使用其它对象作为父对象时,这个对象会自动
2、添加到父对象的children()list中。父对象拥有这个对象,比如,它将在它的析构函数中自动删除它所有的child对象。你可以通过findChild()或者findChildren()函数来查找一个对象。 每个对象都有一个对象名称(objectName())和类名称(classname),他们都可以通过相应的metaObject对象来获得。你还可以通过inherits()方法来判断一个对象的类是不是从另一个类继承而来。 当对象被删除时,它发出destroyed()信号。你可以捕获这个信号来避免对QObject的无效引用。 QOb
3、ject可以通过event()接收事件并且过滤其它对象的事件。详细情况请参考installEventFilter()和eventFilter()。 对于每一个实现了信号、槽和属性的对象来说,Q_OBJECT宏都是必须要加上的。 QObject实现了这么多功能,那么,它是如何做到的呢?让我们通过它的SourceCode来解开这个秘密吧。QObject类的实现文件一共有四个.·qobject.h,QObjectclass的基本定义,也是我们一般定义一个类的头文件.·qobject.cpp,QObjectclass的实现代码基本上都在这个文件
4、.·qobjectdefs.h,这个文件中最重要的东西就是定义了QMetaObjectclass,这个class是为了实现signal、slot、properties,的核心部分。·qobject_p.h,这个文件中的code是辅助实现QObjectclass的,这里面最重要的东西是定义了一个QObjectPrivate类来存储QOjbect对象的成员数据。理解这个QObjectPrivateclass又是我们理解QTkernelsourcecode的基础,这个对象包含了每一个QT对象中的数据成员,好了,让我们首先从理解QObject的数据存储
5、代码开始我们的QTKernelSourceCode之旅。二:元对象系统(Meta-ObjectSystem) 从本节开始,我们讲解QTMeta-ObjectSystem的功能,以及实现。 在使用QT开发的过程中,大量的使用了signal和slot.比如,响应一个button的click事件,我们一般都写如下的代码:classMyWindow:publicQWidget{ Q_OBJECT public: MyWindow(QWidget*parent):QWidget(parent) { QPushButton*btnStart=ne
6、wQPushButton(“start”,this); connect(btnStart,SIGNAL(clicked()),this,SLOT(slotStartClicked())); }privateslots: voidslotStartClicked();};voidMyWindow::slotStartClicked(){ //省略} 在这段代码中,我们把btnStart这个button的clicked()信号和MyWindow的slotStartClicked()这个槽相连接,当btnStart这个button被用户按
7、下(click)的时候,就会发出一个clicked()的信号,然后,MyWindow::slotStartClicked()这个slot函数就会被调用用来响应button的click事件。 这段代码是最为典型的signal/slot的应用实例,在实际的工作过程中,signal/slot还有更为广泛的应用。准确的说,signal/slot是QT提供的一种在对象间进行通讯的技术,那么,这个技术在QT中是如何实现的呢? 这就是QT中的元对象系统(MetaObjectSystem)的作用,为了更好的理解它,让我先来对它的功能做一个回顾,让我们一
8、起来揭开它神秘的面纱。Meta-ObjectSystem的基本功能MetaObjectSystem的设计基于以下几个基础设施:·QObject类作为每
此文档下载收益归作者所有