零声Qt开发必备技术栈 (Qt5/C语言/c++/数据库/OpenCV/Quick/Qt实战)
2023-05-22 10:52 作者:bili_73767213996 | 我要投稿
QT MOC机制
QT的元对象系统是一个基于标准C++的扩展,能够使c++更好的适应GUI编程,支持开发人员在执行期获取对象的信息,同时这一机制也支持属性以及文本翻译(国际化,多语言)。
由于标准C++并没有提供动态元信息的支持,因此qt通过一个单独的工具moc来处理这个问题,moc工具会解析头文件中被Q_OBJECT宏声明的类,并生成一个单独的标准cpp文件来实现,因此对任何c++编译器而言,QT的moc机制都可以正常工作。
在具体的代码编写中,只有继承自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用于构造一个新的实例。