明仕强QT高级开发 学习笔记
在具体的代码编写中,只有继承自QObject的类中,才可以通过宏Q_OBJECT进行修饰,从而转变成要给元对象。
对于一个元对象,它有如下一些特点
1:可以支持QT特有的signals和slots机制,在不同对象之间进行通信。
2:可以支持QObject::metaObject方法,用于返回类关联的元对象。
3:可以支持QMetaObject::className,用于在执行期获取对象的类名。
4:可以支持QObject::inherits方法,用于判断一个对象是否继承自QObject
5:可以支持QObject::setProperty和QObject::property方法,用于动态的设置和获取属性名称。
6:可以支持通过QMetaObject::newInstance用于构造一个新的实例。
在使用QT的MOC机制时,存在的一些限制
1:不能对模板类使用MOC机制(模板类无法继承自QObject)。
2:多重继承时QObject必须是第一个,且不支持QObject的虚继承。
3:函数指针不能作为信号或槽的参数。但通过typedef简化后的函数指针可以作为槽函数的参数。
4:信号和槽函数的参数必须是完全名称限定。
5:内嵌类不能有信号和槽。
6:信号和槽函数返回不能是引用。

