Qt元对象系统,即meta object system(mos),提供了大家熟知的用于对象间信息传递的信号与槽机制,运行时类型信息和动态属性系统。
mos基于三件法宝:
一是QObject类,是所有Qt对象的基类,可以很好的使用mos。
二是Q_OBJECT宏,在类private部分声明,用于激活mos特性,例如动态属性、信号与槽。
三是元对象编译器,即meta object compiler(moc),为QObject的派生类提供了必要的代码以实现mos特性。例如Example.h中声明了Example类,继承自QObject类且使用了Q_OBJECT宏,那么moc就会找到用Q_OBJECT宏声明的这个Example类,然后生成一个moc_Example.cpp文件,记录了相关的mos代码。
mos中除了信号与槽这个核心外,还有一些实用的东西:
1、QObject::metaObject(),返回当前类的元对象信息,是个QMetaObject指针;
QObject::staticMetaObject也可以获取当前类的元对象信息,类型是QMetaObject。
2、QObject::inherits(),判断当前对象实例的类继承关系。
3、QObject::tr(),Qt语言国际化,返回类型是QString。
4、QObject::property()/setProperty(),通过属性名动态获取/修改属性值。
5、QMetaObject::className(),运行时返回类名,返回类型是char*。
6、QMetaObject::newInstance(),构造一个新的实例。
7、qobject_cast(),动态类型转换,类似于标准C++的dynamic_cast(),不同的是它不需要RTTI(run time type information)且不受动态库的限制。
原文地址:http://blog.csdn.net/ieearth/article/details/42744197