6

我有一个程序在 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"

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

4

3 回答 3

8

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

Moc 通过解析头文件来查找 Q_OBJECT、signal:、slot: 等定义来做到这一点。

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

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

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

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

于 2011-05-18T10:26:19.320 回答
2

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

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

于 2013-04-17T19:27:24.463 回答
0

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

   moc ****.h -o ***.moc
于 2011-05-18T09:50:13.493 回答