是啥导致了这个 QT 4.7.3 错误?

Posted

技术标签:

【中文标题】是啥导致了这个 QT 4.7.3 错误?【英文标题】:What's causing this QT 4.7.3 error?是什么导致了这个 QT 4.7.3 错误? 【发布时间】:2011-05-18 09:39:39 【问题描述】:

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

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

【问题讨论】:

您是否尝试过“make clean”来删除以前生成的文件,然后重新运行“make”? 你确定你还没有以某种方式使用旧版本 Qt 的包含? 尝试干净签出/删除所有 moc_/.moc 文件,重新运行 qmake 4.7.3 并制作。 【参考方案1】:

出现此错误是因为您正在使用在一个 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

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

【讨论】:

cmake中make clean的等价物是什么?【参考方案2】:

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

为什么它分别不是“qmake-qt3”和“qmake”,我无法理解。

【讨论】:

【参考方案3】:

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

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

【讨论】:

在错误消息中似乎声明它是使用当前的 MOC 工具创建的,但是使用的标头太旧了。

以上是关于是啥导致了这个 QT 4.7.3 错误?的主要内容,如果未能解决你的问题,请参考以下文章

Python MySQLdb错误 - 是啥导致了这个

是啥导致了这个“jpackage 不存在”错误?

是啥导致了这个“无效的游标状态”错误?

是啥导致了这个 ActiveRecord::ReadOnlyRecord 错误?

是啥导致了这个错误? “CALayer 位置包含 NaN:[240 nan]”

是啥导致了这个 Heroku mysql 连接错误? (尝试将前端连接到后端 POST 请求)