我有一个程序可以在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"
有谁能告诉我发生了什么事?
答案 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