神秘的Qt未定义接口:调查



我正在编写一个带有插件的典型Qt(4.8.2)应用程序。其中一个插件通过调用Q_INTERFACE宏包括几个自定义接口。这些接口位于项目可见的.h文件中(通过.pro包含),并且它们都包含对Q_DECLARE_INTERFACES的宏调用。

然而,在编译moc 文件时,我在插件的主 .h 文件中出现一个未定义的接口错误。它没有告诉我哪个,它只指定了第一行(我尝试更改顺序,但没有区别 - 除非所有接口都受到影响 - 哎呀,谁知道呢,可能是这种情况。

这个插件在其他人的办公桌上工作。主应用程序中的一些内容是用Qt 5编写的,但总是使用宏来检查版本,并包含像我这样的早期版本的其他代码。这也适用于其他人的办公桌,他们使用 4.8.2 作为他们的插件。

在哪里查找该错误的原因?

我不知道为什么我的问题被否决了,但这是答案:

随着项目的副本,我还收到了moc_*.cpp文件和一些称为mocinclude.tmp的文件。这是第一个git 添加错误。

但是还有另一个问题:至少后者(如果不是前者)没有得到正确清洁或由Qmake/make clean重新创建。

第三个问题:在mocinclude中.tmp有来自最初创建项目的计算机的绝对文件路径,这不是我的。相对路径不太容易出错。

在编译 moc 文件时,这些错误的绝对路径会导致"未定义的接口"错误(在需要接口文件的情况下,这只不过是"找不到文件"错误)。

删除所有mocinclude.tmp(和moc文件)解决了我的问题。

(我还确保告诉 git 不再跟踪它们。