- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Qtopia部分内部机制浅析
Qtopia部分内部机制浅析 主要内容 父子化机制 对象间的通信 进程间的通信 应用程序的启动过程及事件处理 C/S体系结构 参考文献 主要内容 父子化机制 对象间的通信 进程间的通信 应用程序的启动过程及事件处理 C/S体系结构 参考文献 父子化机制 父子化机制是在QObject类实现的,当我们父化一个对象时(一个窗口小部件、布局或其他种类),该父级添加这个对象到他的QObjectList中,当这个父级被解除时,它将遍历QObjectList并解除所有子级。 父化子化机制简化了内存管理,减少了内存泄漏风险。我们必须删除唯一的对象是我们用new创建的对象并且内有被父化的,如果我们要删除一个子级对象,qt将自动从父级的子级列表中移出该对象。 父子化机制 class Q_CORE_EXPORT QObject { ……… protected: QObjectData *d_ptr; ……… } 父子化机制 class QObjectData { public: ……. QObject *parent; QObjectList children; …….. }; 父子化机制 当创建一个对象时,这个对象的父级自动调用函数 insertChild ()将该对象插入到它的QObjectList中。 Qt 3的做法: void insertChild(QObject *o) { if (o) o-setParent(this); } Qt4.2的做法: QObject::QObject(QObject *parent) : d_ptr(new QObjectPrivate) { ……. setParent(parent); } 父子化机制 得到child的对象链表: QObjectList children() const { return d_ptr-children; } 主要内容 父子化机制 对象间的通信 进程间的通信 应用程序的启动过程及事件处理 C/S体系结构 参考文献 对象间通信 在图形用户界面编程中,经常需要将一个窗口部件的变化通知给另一个窗口部件,或者说希望对象间进行通信,一般的方法是采用回调函数的方法进行,而在qt中采用了信号和槽的方式进行。 通过将信号与槽连接,当一个特定事件发生时,将信号发射,然后在连接的槽中对信息进行处理。 对象间通信 应用举例: SmsClient::SmsClient() { ……… connect( req, SIGNAL(messageCount( int )), this, SLOT(messageCount( int )) ); ……… } 在SmsClient中将QSMSReader发送的SIGNAL (messageCount( int )信号与SmsClient 的槽SLOT (messageCount( int )连接。 对象间通信 bool QMetaObject::connect(const QObject *sender, int signal_index, const QObject *receiver, int method_index, int type, int *types) { QConnectionList *list = ::connectionList(); if (!list) return false; QWriteLocker locker(list-lock);//加锁 list-addConnection(const_castQObject *(sender), signal_index, const_castQObject *(receiver), method_index, type, types);//向QConnectionList中添加连接 return true; } 对象间通信 class QConnectionList { public: QReadWriteLock lock; typedef QMultiHashconst QObject *, int Hash; Hash sendersHash, receiversHash; QListint unusedCo
文档评论(0)