是啥导致了这个 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 错误?的主要内容,如果未能解决你的问题,请参考以下文章
是啥导致了这个 ActiveRecord::ReadOnlyRecord 错误?