产生背景
Qt的元对象系统为对象间的通信提供了信号槽机制、运行时类型信息、动态属性系统。
核心内容
Qt的元对象系统实现基于三方面:
1. QObject基类。为能够利用元对象系统的对象提供了一个基类。
2. Q_OBJECT宏。用于实现元对象特性,如动态属性、信号槽。
3. Meta-Object Compiler 元对象编译器。为QObject子类提供必要的代码来实现元对象特性。
moc工具会读取C++源文件,如果发现类声明中包含Q_OBJECT宏,会生成新的C++源文件,每个类包含元对象代码。
额外特性
除了提供对象间通信的机制:信号槽。元对象代码还提供了额外的特性:
1. QObject::metaObject(),返回类关联的元对象。
2. QMetaObject::className(),在运行时返回类名。
3. QObject::setProperty()/QObject::property(),根据名称动态的读写属性。
4. QMetaObject::newInstance(),创建类的一个实例。
Qt强烈推荐:无论我们是否用到信号槽、属性等机制,所有QObject的子类都应该添加Q_OBJECT宏。