您的位置:首页 > 编程语言 > Qt开发

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的支持。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: