qt中的元对象系统提供了对象间通信的信号和槽机制、运行时类型
信息和动态属性系统;
1.该类必须继承自QObject类;
2.必须在类的私有声明区声明Q_OBJECT宏(在类定义时,如果没有指定,public或private,则默认为private);
3.元对象编译器Meta-Object Compiler(moc)为QObject的子类实现元对象特性提供必要的代码;
moc工具读取一个C++源文件,如果它发现一个或多个类的声明中包含Q_OBJECT宏,
则会另创建一个以moc_作为前缀的C++源文件,其中包含类为每一个类生成的元对象代码,
这些产生的源文件也会参与编译和链接;
元对象还提供了其他一些特性
1.QObject::metaObject()函数可以返回一个类的元对象;
2.QMetaObject::className()可以在运行时以字符串形式返回类名,而不需要C++编辑器
原生的运行时类型信息(RTTI)的支持
3.QObject::inherits()函数返回一个对象是否是QObject继承树上的一个类的实例的信息;
4.QObject::tr()和QObject::trUtf8()进行字符串翻译来实现国际化;
5.QObject::setProperty()和QObject::property()通过名字来动态设置或者获取对象属性;
6.QMetaObject::newInstance构造类的一个新实例;
还可以使用qobject_cast()函数对QObject类型进行动态类型转换,类似C++中dynamic_cast()函数,不在需要
RTTI的支持,若是正确类型,则返回一个非零的指针,若类型不兼容,则返回0