|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不二如是 于 2016-10-23 16:22 编辑
憋急,我给你翻译下哈~
Qt中的元对象系统(Meta Object System)提供了对象间通信的信号和槽机制、运行时类型信息、动态属性系统。
元对象系统必须基于以下三个充分条件:
- 该类必须继承自QObject类
- 必须在类的似有声明区声明Q_OBJECT宏(类定义,未声明,默认private)
- 元对象编译器Meta 0bject Complier(moc),为QObject子类实现元对象特性提供必要代码
moc工具读取一个C++源文件,如果发现一个或者多个类的声明中包含有Q_OBJECT宏。
便会另外创建一个C++源文件(debug目录下常见的以moc开头的C++源文件)
其中包含了为每一类生成的元对象代码。
元对象系统主要是为了实现信号和槽机制才被引入的,不过除了信号和槽机制,元对象系统还提供了其他一些特性:
- QObject::metaObject()函数
返回一个类的元对象,是QMetaObject类的对象
- QMetaObject::className()函数
运行时以字符串形式返回类名。不需要在C++编辑器原生的运行时类型信息(RTTI)的支持
- QObject::inhertis()函数
返回一个对象是否是QObject继承树上一个类的实例信息
- QObject::tr()&QObject::trUtf8()函数
进行字符串翻译来实现国际化
- QObject::setProperty()&QObject::property()函数
通过名字来动态设置或者获取对象属性。
- QMetaObject()::newInstance()函数
构造该类的一个新实例
除了这些特性,还可以使用qobject_cast()函数来对QObject类进行动态类型转换
QObject *obj = new MyWidget;
QWidget *widget = qobject_cast<QWidget *>(obj);
这个函数尝试将他的参数转换为尖括号(<>)中的类型指针,如果是正确类型,返回一个非零的指针,不兼容,返回0.
|
|