从 Qt4 更改为 Qt5:QtGui/QAction:生成的 ui_ 文件中没有这样的文件或目录

Changing from Qt4 to Qt5: QtGui/QAction: No such file or directory in generated ui_ file

我必须确保我的项目在 Qt 4(我安装了 4.7)和 Qt 5(我安装了 5.5)中构建。

为此,我在 pro 文件的很多地方都有:

NOT_QT_4 {
     QT += widgets
} else {
    #Nothing specific
}

在代码中:

#ifdef NOT_QT_4
    #include <QtWidgets>
#else
    #include <QtGui>
#endif

然而,每次我将构建从 Qt 4 切换到 Qt 5 时,我都会收到错误消息:

ui_somefile.h:14: error: QtGui/QAction: No such file or directory
 #include <QtGui/QAction>
                         ^

这是一个 ui_ 文件,该文件是从使用 Qt Designer 创建的表单生成的...所以我无法将我使用的定义放在普通代码中。

构建它非常困难:Build->Clean All,擦除磁盘上的每个文件(debugreleasemake*ui_*), Build->Clean All 再次(当然没用), 运行 qmake, 再次构建 ...
我仍然必须重复执行此操作,因为 ui_ 文件似乎重新生成了有缺陷的信息。

因为我必须对 Qt4 和 Qt5 版本中的每个提交构建进行起诉,所以我现在必须经常这样做...

如何在 Qt5 中正确构建它 - 或者如何轻松清理构建的特定部分? (一个干净的构建需要几分钟......巨大的项目......)

我建议您将那些 ui_*.h 文件放在不同的位置,这样结果可能会有所不同,并且在 QT 版本之间可以唯一地编译。

NOT_QT_4 {
   UI_HEADERS_DIR = foo
} else {
   UI_HEADERS_DIR = bar
}

您应该执行影子构建以从源中获取所有输出文件。 Qt4 和 Qt5 之间似乎 uic.exe 发生了变化。就我而言,我获得了 Qt5.6,然后我应该在我的 .pro greaterThan(QT_MAJOR_VERSION, 4) 中写入:QT += widgets if not no ui_*.h are released。为了正确清理您的项目,我想您应该更改 makefile 的某些部分。清洁剂是做什么用的?