知识
最后更新于:2022-04-02 02:09:26
[TOC]
## 元对象系统
Qt中的元对象系统(Meta-Object System)提供了对象间通信的信号和槽机制、运行时类型信息和动态属性系统。元对象系统是基于以下三个条件的:
* 该类必须继承自`QObject`类;
* 必须在类的私有声明区声明`Q_OBJECT`宏(在类定义时,如果没有指定`public`或者`private`,则默认为private);
* 元对象编译器Meta-Object Compiler(moc),为`QObject`的子类实现元对象特性提供必要的代码
还提供了其他一些特性:
* `QObject::metaObject()`函数可以返回一个类的元对象,它是`QMetaObject`类的对象;
* `QMetaObject::className()`可以在运行时以字符串形式返回类名,而不需要C++编辑器原生的运行时类型信息(RTTI)的支持;
* `QObject::inherits()`函数返回一个对象是否是`QObject`继承树上一个类的实例的信息;
* `QObject::tr()`和`QObject::trUtf8()`进行字符串翻译来实现国际化;
* `QObject::setProperty()`和`QObject::property()`通过名字来动态设置或者获取对象属性;
* `QMetaObject::newInstance()`构造该类的一个新实例
';