使用Qt Visual Studio集成,添加一个新的Qt类会添加两个单独的moc.exe生成的文件 - 一个用于调试,一个用于发布(一个用于当前存在的任何其他配置)。然而,这两个最终生成的文件似乎完全相同。
另一方面,在添加UI类时,uic.exe生成的文件没有这种分离,并且对于所有配置都是相同的文件。
有没有人知道为什么每个配置都需要一个单独的moc文件?两者之间何时有差异?
答案 0 :(得分:8)
我的猜测是需要单独的调试和发布版本,因为moc输出是从用户定义的源代码生成的。因此,如果预处理类源在调试和发布之间不同(例如,仅存在于调试版本中的信号),则moc输出在调试和发布版本之间可能会有所不同。
这不适用于uic生成的文件,因为它们是从.ui XML生成的,在调试和发布配置之间不会有所不同。
答案 1 :(得分:7)
Moc解析预处理器指令的源代码。所以如果你有一个这样的头文件:
class Test : public QObject
{
Q_OBJECT
public:
Test();
public slots:
#ifndef DEBUG
void Foo();
#endif
};
然后插槽Foo将仅存在于发布版本中,而不存在于调试版本中。 Moc将生成不同的moc.cpp文件,具体取决于是否设置了DEBUG(在本例中)符号。