moc 全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件。如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_ 构成。这个新的文件同样将进入编译系统,最终被链接到二进制代码中去。因此我们可以知道,这个新的文件不是“替换”掉旧的文件,而是与原文件一起参与编译。另外,我们还可以看出一点,moc 的执行是在预处理器之前。因为预处理器执行之后,Q_OBJECT 宏就不存在了。
在构建完项目之后,可以在该项目的目录下找到debug目录下的moc_项目.moc文件,里面就是moc所生成的代码。
本文介绍了Qt中的元对象编译器(MOC)的工作原理及其如何处理带有Q_OBJECT宏的C++源文件。通过MOC生成的代码可以实现信号槽等特性,并详细解释了这些文件如何参与到最终的编译过程中。
1923

被折叠的 条评论
为什么被折叠?



