Qt之美(二):元对象
来源:互联网 发布:魔兽世界32位优化设置 编辑:程序博客网 时间:2024/04/29 23:08
本文的英文版在这里:http://xizhizhu.blogspot.com/2010/12/beauty-of-qt-2-meta-object.html
除了D指针,Qt中另一个很有意思的部分就是Q_OBJECT宏了。该宏提供了对元对象的访问,使得能够使用比如信号和槽等QObject的更多特性。元对象提供了诸如类名、属性和方法等的信息,也被称为“反射”。
通过使用QMetaObject,我们能够用如下代码显示一些类的信息:
由于C++并没有提供对这些信息的任何支持,Qt引入了元对象编译器(moc)来完成相应的工作。moc会读取每个头文件,如果发现其中定义的类是继承自QObject,且定义了Q_OBJECT宏,便会创建一个相应的C++源代码文件(moc_*.cpp),来完成这些工作。通过代码生成的工作,Qt不仅能够获得诸如Java等语言的灵活性,还能很好的保证继承自C++的性能和可扩展性。
假设我们有如下所示的简单类:
moc会自动创建以下信息:
以上信息,及其基类的相关信息,都保存在该类对应的元对象中:
这样,如果我们希望对QObject的对象进行类型转换,就不需使用开销较大的运算符dynamic_cast, 而能够直接使用qobject_cast。该模板函数利用了元对象系统的信息,避免了在运行时进行类型转换:
这里,目标类型的元对象仅仅检查其是否从自身继承而来:
此外,moc会为每一个信号创建相应函数。当信号被emit时,该函数会被自动调用:
最后,这些信号都会通过moc创建的qt_metacall函数被调用:
- Qt之美(二):元对象
- Qt之美(二)元对象
- Qt之美(二):元对象
- (转载)Qt之美(二)元对象
- Qt框架浅析之三 ------ Qt元对象系统(二)
- QT源码解析(二)深入剖析QT元对象系统和信号槽机制
- QT中的元对象系统(二):创建自定义的QT类型
- QT中的元对象系统(二):创建自定义的QT类型
- QT中的元对象系统(二):创建自定义的QT类型 收藏
- QT中的元对象系统(二):创建自定义的QT类型
- QT中的元对象系统(二):创建自定义的QT类型
- QT中的元对象系统(二):创建自定义的QT类型
- QT 中的元对象系统(二):创建自定义的QT类型
- QT 之 MOC 元对象编译器
- Qt 元对象系统之 "enum自省"
- Qt 源码之元对象(QMetaObject)
- Java之美之类与对象(二)
- Qt框架浅析之三 ------ Qt元对象系统(一)
- 希望这篇文章改变了你
- 整合经营模式之道——整合经营模式IMO的股票畅想
- make时可能会出的问题
- Fibonacci Again
- XML教程和SVG可伸缩矢量图形 (Scalable Vector Graphics)教程
- Qt之美(二):元对象
- Android开发笔记: Activity
- 查询正在后台进行的SQL查询
- 【淘宝SEO技巧】解读淘宝新规及SEO技术实战指南
- WinEdt 6 避免跳出注册对话框的一个小技巧
- Mule学习笔记
- 基于XML和Python实现白盒测试程序与测试用例分离
- [IPhone] Post to Twitter
- Ural 1260. A nudnik photographer