从Qt4更改为Qt5:QtGui/QAction:在生成的ui_uu文件中没有此类文件或目录

从Qt4更改为Qt5:QtGui/QAction:在生成的ui_uu文件中没有此类文件或目录,qt,qt5,qmake,build-error,Qt,Qt5,Qmake,Build Error,我必须确保我的项目同时在Qt4(我安装了4.7)和Qt5(我安装了5.5)中构建 为此,在我的许多地方,在pro文件中: NOT_QT_4 { QT += widgets } else { #Nothing specific } 在代码中: #ifdef NOT_QT_4 #include <QtWidgets> #else #include <QtGui> #endif #如果定义不是QT_4 #包括 #否则 #包括 #恩迪夫 但

我必须确保我的项目同时在Qt4(我安装了4.7)和Qt5(我安装了5.5)中构建

为此,在我的许多地方,在pro文件中:

NOT_QT_4 {
     QT += widgets
} else {
    #Nothing specific
}
在代码中:

#ifdef NOT_QT_4
    #include <QtWidgets>
#else
    #include <QtGui>
#endif
#如果定义不是QT_4
#包括
#否则
#包括
#恩迪夫
但每次我将构建从Qt 4切换到Qt 5时,都会出现一个错误:

ui_somefile.h:14: error: QtGui/QAction: No such file or directory
 #include <QtGui/QAction>
                         ^
ui\u somefile.h:14:错误:QtGui/QAction:没有这样的文件或目录
#包括
^
这是在一个
ui\uu
文件中,该文件由使用Qt设计器创建的表单生成。。。所以我不能在普通代码中使用定义

构建非常困难:
build->Clean All
,擦除磁盘上的每个文件(
debug
release
make*
ui.*
),
build->Clean All
,再次运行
qmake
,再次构建…
但我还是不得不重复这样做,因为
ui\uu
文件似乎是用有缺陷的信息重新生成的

因为我必须在Qt4和Qt5版本中进行sue every commit构建,所以我现在必须经常这样做


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

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

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

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

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

您应该进行阴影构建,以从源代码中获取所有输出文件。似乎uic.exe在Qt4和Qt5之间发生了变化。就我而言,我得到了Qt5.6,然后我应该在我的.progreaterthan(QT_MAJOR_版本,4)中编写:QT+=widgets,如果没有发布ui.*.h。为了正确地清理你的项目,我想你应该改变你的makefile的某些部分。你用什么清洁剂

您应该进行阴影构建,以从源文件中获取所有输出文件。似乎uic.exe在Qt4和Qt5之间发生了变化。就我而言,我得到了Qt5.6,然后我应该在我的.progreaterthan(QT_MAJOR_版本,4)中编写:QT+=widgets,如果没有发布ui.*.h。为了正确地清理你的项目,我想你应该改变你的makefile的某些部分。你用什么清洁剂

使用源代码外版本@peppe这是什么意思?假设您的软件位于
mysoftware
mkdir qt4build;cd-qt4build/路径/to/qt4/qmake../mysoftware/;make
,这是您的Qt4版本。冲洗并重复Qt 5:
cd。。;mkdir qt5build;cd QT5构建/路径/to/qt5/qmake../mysoftware/;制作
。停止使用来自不同构建配置的工件篡改同一构建目录。只需从源代码构建即可。在Creator中,同样的操作在项目选项卡中完成。假设在工具->选项中正确配置了两个Qt版本,则进入项目窗格。在顶部配置两个工具包(一个用于Qt4,一个用于Qt5),为每个工具包指定不同的源代码外构建目录。完成。使用源代码外版本@peppe这是什么意思?假设您的软件位于
mysoftware
mkdir qt4build;cd-qt4build/路径/to/qt4/qmake../mysoftware/;make
,这是您的Qt4版本。冲洗并重复Qt 5:
cd。。;mkdir qt5build;cd QT5构建/路径/to/qt5/qmake../mysoftware/;制作
。停止使用来自不同构建配置的工件篡改同一构建目录。只需从源代码构建即可。在Creator中,同样的操作在项目选项卡中完成。假设在工具->选项中正确配置了两个Qt版本,则进入项目窗格。在顶部配置两个工具包(一个用于Qt4,一个用于Qt5),为每个工具包指定不同的源代码外构建目录。完成。