Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在不同的qt版本中使用相同的qt.ui文件_C++_Qt_Qt Designer - Fatal编程技术网

C++ 在不同的qt版本中使用相同的qt.ui文件

C++ 在不同的qt版本中使用相同的qt.ui文件,c++,qt,qt-designer,C++,Qt,Qt Designer,出于历史原因,我们需要保持我们的软件与Qt4.8兼容。当前分支基于Qt5.2构建 最近,我一直在尝试利用QWidget的一些新特性,比如QAbstractScrollArea::SetSizedJustPolicy。不幸的是,当我这样做时,我无法在Qt4.8中编译,VisualStudio会产生以下错误 错误C2039:“AdjustToContents”:不是“QAbstractScrollArea”的成员 通常,我会使用预编译器指令调整每个版本的代码。但是,在本例中,我不能这样做,因为qt

出于历史原因,我们需要保持我们的软件与Qt4.8兼容。当前分支基于Qt5.2构建

最近,我一直在尝试利用QWidget的一些新特性,比如QAbstractScrollArea::SetSizedJustPolicy。不幸的是,当我这样做时,我无法在Qt4.8中编译,VisualStudio会产生以下错误

错误C2039:“AdjustToContents”:不是“QAbstractScrollArea”的成员

通常,我会使用预编译器指令调整每个版本的代码。但是,在本例中,我不能这样做,因为qt designer正在生成一个.ui文件,该文件会动态生成代码

<> p>是否有一种方法让Qt知道在编译时要排除.UI文件的某些节点?

当使用qGuy构建时,您可以考虑下面的片段

greatherThan(QT_MAJOR_VERSION, 4) {
    FORMS += # qt 5 forms goes here
    INCLUDEPATH += # path to qt 5 forms
} else {
    FORMS += # qt 4 forms goes here
    INCLUDEPATH += # path to qt 4 forms
}
然后,考虑到这些文件被称为相同的文件,并且被放置在不同的、特定于版本的目录中,您应该在源文件中轻松地使用它们

查询QT_VERSION的值可能使您能够对较小的版本更改做出反应。因此,您应该使用contains(…)和一些适当的正则表达式



我洗脑了很多,但没有想出一个解决方案,其中一个用户界面文件会随着使用的Qt版本而改变。也许您可以在工具链中进行一些XML预处理…

.ui
文件只是一个XML文件。通过
uic
将其转换为代码。生成的代码特定于具有特定Qt版本的生成,您不能在多个Qt安装中重用同一生成目录,从而无法重用uic输出。Uic输出不应位于源代码存储库中

您得到的错误表明您正在将Qt5.6的uic输出用于Qt4。这是不可能的

相反,您应该使用Qt4对代码进行干净的构建,uic很可能会忽略、警告或中止未知元素/属性。如果它真的中止了,那么修改uic就很容易了,不需要这样做(必须更改几行)


如果您是专业地使用Qt,那么您已经在构建自己维护的拷贝,因此修补uic应该是添加到您的过程中的一件小事。

谢谢您的回答。我也考虑过,但正如您所说,您需要维护同一文件的两个不同版本。我想要做到这一点是不容易的。我将检查一下您关于XML预处理的想法,但我担心这可能是我们正在尝试做的大量工作。