Qt中的元对象系统
2015-11-01 16:55
288 查看
Qt中的元对象系统(Meta-Object System)提供了对象间通信的信号和槽机制,运行时类型信息和动态属性系统。元对象系统是基于以下三个条件的:
该类必须继承自QObject类
必须在类的私有声明区声明Q_OBJECT宏(在类定义时,如果没有指定public或private,则默认为private)
元对象编辑器Meta-Object Complier(moc),为QObject的子类实现元对象提供必要的代码
其中,moc攻击读取一个C++源文件,如果它发现一个或者多个类的声明中包含Q_OBJECT宏,便会另外创建一个C++源文件(就是在项目目中的debug目录下看到的以moc开头的C++源文件),其中包含了为每一个类生成的元对象代码。这些产生的源文件或者被包含进类的源文件中,或者和类的实现同时进行编译和链接。
元对象系统主要是为了实现信号和槽机制才被引入的,不过除了信号和槽机制以外,元对象系统还提供了其他的一些特性:
QObject::metaObejct()函数可以返回一个类的元对象,它是QMetaObject类的对象。
QMetaObject::className()函可以在运行时以字符串形式返回类名,而不需要C++编译器原生的运行时类型信息(RTTI)的支持。
QObject::inherits()函数返回一个对象是否是QObject继承树上一个类的实例的信息。
QObject::tr()和QObject::trUtf8()进行字符串翻译来实现国际化
QObject::setProperty()和QObject::property()通过名字来动态设置或者获取对象属性
QMetaObject::newInstance()构造该类的一个新实例
除了这些特性,还可使用qobject_cast()函数来对QObject类进行动态类型转换,这个函数的功能类似于标准C++中的dynamic_cast()函数,但它不在需要RTTI的支持。
该类必须继承自QObject类
必须在类的私有声明区声明Q_OBJECT宏(在类定义时,如果没有指定public或private,则默认为private)
元对象编辑器Meta-Object Complier(moc),为QObject的子类实现元对象提供必要的代码
其中,moc攻击读取一个C++源文件,如果它发现一个或者多个类的声明中包含Q_OBJECT宏,便会另外创建一个C++源文件(就是在项目目中的debug目录下看到的以moc开头的C++源文件),其中包含了为每一个类生成的元对象代码。这些产生的源文件或者被包含进类的源文件中,或者和类的实现同时进行编译和链接。
元对象系统主要是为了实现信号和槽机制才被引入的,不过除了信号和槽机制以外,元对象系统还提供了其他的一些特性:
QObject::metaObejct()函数可以返回一个类的元对象,它是QMetaObject类的对象。
QMetaObject::className()函可以在运行时以字符串形式返回类名,而不需要C++编译器原生的运行时类型信息(RTTI)的支持。
QObject::inherits()函数返回一个对象是否是QObject继承树上一个类的实例的信息。
QObject::tr()和QObject::trUtf8()进行字符串翻译来实现国际化
QObject::setProperty()和QObject::property()通过名字来动态设置或者获取对象属性
QMetaObject::newInstance()构造该类的一个新实例
除了这些特性,还可使用qobject_cast()函数来对QObject类进行动态类型转换,这个函数的功能类似于标准C++中的dynamic_cast()函数,但它不在需要RTTI的支持。
相关文章推荐
- PyQt4 学习笔记5之对话框
- Qt开发环境安装与软件下载
- MSVC 2013 + Qt 5.4.2 + quazip 0.7.1 的编译及使用
- QT布局
- 解决Qt5 Creator无法切换输入法(fcitx),不能录入汉字问题
- Qt自定义圆周动画(360 10.0 的模仿作者写的)
- 航班预定登录系统UFT脚本
- 交叉编译qt-everyonewhere-opensource-src-4.6.3出错
- 在HI3531上移植和运行QT4.8.6
- Qt官方开发环境生成的exe发布方式--使用windeployqt
- PyQt4 学习笔记4之事件与信号
- Qt:Qt实现具有反锯齿的圆角窗口:不规则窗口
- 在Qt 5.3中嵌入自定义QWidget
- [Qt]不带标题栏(FramelessWindowHint)的窗体移动及调整大小
- Qt之实现360安全卫士主界面(四)
- Qt之实现360安全卫士主界面(三)
- Qt之实现360安全卫士主界面(二)
- Qt之实现360安全卫士主界面(一)
- Qt 高仿QQ窗口抖动效果【原】
- Qt动画效果展示