QT特性-QObject、MOC、MOS
sf2gis@163.com
2015年1月7日
1 Meta-Object System元对象系统
目标:Qt的元对象系统提供了QObject的基本功能,包含信号-槽,动态属性,运行时类型信息(RTTI)等。
原理:
QObject提供MOS的功能接口。
Q_OBJECT标识启用元对象系统。
MOC生成元对象系统的标准C++代码。
方法:
QObject::metaObject():返回相关的QMetaObject对象。
QMetaObject::className():返回当前类名(字符串)。
QObject::inherits():判断是否继承自指定类。
QObject::tr()/trUtf8():转码。
QObject::Property()/setProperty():动态属性。
QMetaObject::newInstance():创建新实例对象。
qobject_cast<type *>(obj):高级类型转换,不需要编译器支持RTTI,支持dll。
由于无Q_OBJECT宏时,无法使用QObject的特性,建议无论何时都使用Q_OBJECT。
QMetaObject::connectSlotsByName(this):自动连接机制,将this中槽函数与子对象建立连接。
2 QObject
QObject是所有Qt类的基类。
QObject在释放时会发出destroyed信号。
QObject会对所在线程的所有对象发布信号。
2.1 objecttree/parent-children/ownership
QObject存在对象树,父对象拥有子对象的所有权。
所有权是指父对象释放时,会先将子对象释放。
QObject具有一个objectName属性,可以通过setObjectName()设置。
QObject所属的类可以通过QMetaObject::className()获取