导致此QT 4.7.3错误的原因是什么?

时间:2011-05-18 09:39:39

标签: c++ qt qt4 opensuse moc

我有一个程序可以在OpenSuse 11.2和QT 4.5版本中编译得很好。但是,当我使用OpenSuse 11.4和QT 4.7.3编译相同的程序时,我收到此错误消息:

"This file was generated using the moc from 4.7.3. It cannot be used with the include    files from this version of Qt. The moc has changed too much"

有谁能告诉我发生了什么事?

3 个答案:

答案 0 :(得分:8)

发生此错误是因为您正在使用在一个Qt版本上编译的项目。 主要原因是Qt使用moc工具为信号槽处理和其他东西创建胶水代码。

Moc通过解析头文件来查找定义,如Q_OBJECT,signal:,slot:等等。

此代码与用于创建此代码的Qt版本完全相关。 在某些情况下,即使对于配置了不同选项集的相同版本的Qt库,此代码也完全不兼容。

即使对于.pro中的某些更改,这种情况也是如此,例如,使用CONFIG + = no_keywords导致moc生成不同的粘合代码,从而允许Qt与其他库(如boost)一起使用,这些库使用相同的关键字(如Qt)提供信号槽机制。

因此,简而言之,每当您需要针对不同的Qt库编译Qt项目时,请确保执行以下操作: 运行:make distclean 2.运行:qmake 3. run:make

这将始终为您提供一个干净的构建树。

答案 1 :(得分:2)

在我的情况下,这是因为我正在运行“qmake”而不是“qmake-qt4”。 “qmake”显然是Qt3。我在Fedora Core 16上遇到过这个问题。

为什么它不分别是“qmake-qt3”和“qmake”,超出了我的范围。

答案 2 :(得分:0)

为什么不使用新版本(在您的情况下是4.7.3)和相应的头文件创建新的moc。

   moc ****.h -o ***.moc