1,QT元对象系统简介
Qt的信号槽和属性系统具有运行时查询对象信息的能力,但是C++查询对象信息的能力比较有限,仅仅能够通过RTTI的typeid和dynamic_cast关键字来实现。
QT拓展了C++ 的这种能力,但是没有采用C++标准库的RTTI,而是提供了更为强大的元对象(meta object)机制,基于元对象,可以列出对象的方法和属性列表,并且能够获取有关对象的所有信息如参数类型。
QT中的元对象系统全称为Meta Object system,是一个基于C++标准库的扩展,为QT提供了一下信号与槽机制,实时类型信息,动态属性系统。
1)QObject类
作为每一个需要利用元对象系统的类的基类。
2)Q_OBJECT 宏
定义在每个类的头文件中,用来启用元对象功能,比如动态属性,信号和槽。
在一个QObject类或者其派生类中,如果没有声明这个宏,调用的metaObject()返回的就是其父类的metaobject对象,导致从类获取的元数据其实是父类的数据,因此,任何从QObject继承的类,都应该声明Q_OBJECT宏
3)元对象编译器MOC
MOC 会分析C++的头文件,如果发现Q_OBJECT宏定义,会动态生成一个moc_ 的C++源文件,源文件包含Q_OBJECT的实现代码,会被编译链接到类的二进制代码中,作为类的一部分。
2,元对象的功能
1)信号