catalog
元对象系统
元对象系统 的 作用
- 通过 (信号与槽), 来实现: 对象间的通信
- 运行时类型信息
- 动态属性
实现 (元对象系统), 依赖3部分
- 0, 继承
QObject
作为父类 - 1, 类内书写
Q_OBJECT
宏 - 2, 通过
moc
编译器, 他会生成moc_xxx.cpp
(元对象)的 具体特性:
- signal和shot
QObject::metaObject()
: 与之相关联的 元对象QMetaObject::className()
运行时的类名; (不依赖于c++编译器的RTTI)QObject::inherits( const char *)
QObject::tr()
QObject::setProperty() and QObject::property()
QMetaObject::newInstance()
QMetaObject
每一个 (QObject)类 的定义, 系统都会为他 生成一个 QMetaObject
对象;
通过QObject::metaObject()
, 可以获取, 一个类 所对应的 元对象
比如, class Foo : public QObject{}
, Foo f0, f1, f2;
,
则{f0, f1, f2}.metaObject()
, 都是同一个对象;
一个QMetaObject
对象里, 会存储 (元信息), 即, 与 (该类定义) 相关的信息:
className()
, 类名Foo
superClass()
, 该类的父类的 (元对象)classInfo
, 有关类的信息class Fa : QObject{ Q_OBJECT Q_CLASSINFO(