元对象系统基础功能:
(1)信号与槽
(2)运行时信息
(3)动态属性
元对象系统有三个支撑基础:
- object提供基础类,继承此则可利用元对象系统
- Q_OBJECT若使用元对象提供的服务,必须在类中包含此宏,编译后会自动生成元对象相应的源文件(moc_xxx.cpp)
- 元对象编译器(moc)会为每个QObject子类提供实现元对象特性所需的代码。(即第二点所述)
元对象系统还有以下一些附加特性:
(1)[virtual] const QMetaObject *QObject::metaObject() const (QMetaObject为结构体)
QMetaObject包含有关继承QObject的类的各种信息,例如类名、超类名、属性、信号和插槽。每个包含Q_OBJECT宏的QObject子类都有一个meta对象。
(2)bool QObject::inherits(const char *className) const
判断该实例是否继承自className类或是className类的子类。是则返回true。
(3)[static] QString QObject::tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1)
(4)bool QObject::setProperty(const char *name, const QVariant &value)
(5)类型转换
qobject_cast()
QObject的所有子类使用Q_OBJECT宏,而不管它们是否实际使用信号、槽和属性。