Qt 的元对象系统(Meta-Object System)提供了对象之间通信的信号与槽机制、运行时类型信息和动态属性系统。
元对象系统由以下三部分组成:
1.QObject 类是所有使用元对象系统的类的基类。
2.在类的头文件中声明 Q_OBJECT宏,使得类可以使用元对象的特性,如动态属性、信号与槽。
3.moc(Meta-Object compiler元对象编译器)为每个 QObject 的子类提供必要的代码来实现元对象系统的特性。
构建项目时,moc工具读取 C++ 源文件,当它发现类的定义里有 Q_OBJECT 宏时,它就会为这个类生成另外一个包含有元对象支持代码的 C++ 源文件,这个生成的源文件连同类的实现文件一起被编译和连接。该文件名为moc_源文件名,在build目录中,它包含了 Q_OBJECT 宏的实现代码。另外,我们还可以看出一点,moc 的执行是在预处理器之前。因为预处理器执行之后,Q_OBJECT 宏就不存在了。
前面我们说过,Qt 不是使用的“