首页 > 代码库 > 什么是Qt元对象系统

什么是Qt元对象系统

Qt元对象系统,即meta object systemmos),提供了大家熟知的用于对象间信息传递的信号与槽机制,运行时类型信息和动态属性系统。

mos基于三件法宝:

一是QObject类,是所有Qt对象的基类,可以很好的使用mos

二是Q_OBJECT宏,在类private部分声明,用于激活mos特性,例如动态属性、信号与槽。

三是元对象编译器,即meta object compilermoc),为QObject的派生类提供了必要的代码以实现mos特性。例如Example.h中声明了Example类,继承自QObject类且使用了Q_OBJECT宏,那么moc就会找到用Q_OBJECT宏声明的这个Example类,然后生成一个moc_Example.cpp文件,记录了相关的mos代码。

mos中除了信号与槽这个核心外,还有一些实用的东西:

1QObject::metaObject(),返回当前类的元对象信息,是个QMetaObject指针;

      QObject::staticMetaObject也可以获取当前类的元对象信息,类型是QMetaObject

2QObject::inherits(),判断当前对象实例的类继承关系。

3QObject::tr()Qt语言国际化,返回类型是QString

4QObject::property()/setProperty(),通过属性名动态获取/修改属性值。

5QMetaObject::className(),运行时返回类名,返回类型是char*

6QMetaObject::newInstance(),构造一个新的实例。

7qobject_cast(),动态类型转换,类似于标准C++dynamic_cast(),不同的是它不需要RTTIrun time type information)且不受动态库的限制。


什么是Qt元对象系统