如何在.pro文件中检查所选的Qt版本?

Pie*_*tro 20 qt qmake qt4 qtgui qt5

我安装了多个版本的Qt,我需要用所有这些版本编译我的项目.
使用专业文件,我在文档中找不到如何进行条件编译.

理想情况下,这就是我想要做的事情:

QT_VERSION = 5   # this can be 4, set manually

if(QT_VERSION == 5) {
   QT += widgets
}
if(QT_VERSION == 4) {
   QT += gui
}
Run Code Online (Sandbox Code Playgroud)

当然,pro文件中不存在if()命令.
有没有更好的方法来做同样的事情?

Nem*_*ric 24

您可以在此处使用条件函数和范围:

QT_VERSION = 5   # this can be 4, set manually

equals(QT_VERSION, 5){
   QT += widgets
}
equals(QT_VERSION, 4) {
   QT += gui
}
Run Code Online (Sandbox Code Playgroud)

但是,您需要在原始代码中注意以下几点:

  1. 明确定义Qt版本不是必需的,如果您忘记在.pro文件中更改它,它会让您头疼.相反,qmake会自动QT_MAJOR_VERSION为您定义变量.

  2. 使用equals将在这种情况下工作.但是,如下所述,equals执行字符串比较.但是,最好使用greaterThan并且lessThan因为当您尝试使用Qt 6(将来的某个地方)编译它时,您的代码将自动停止工作.

  3. 添加guiQT是不需要的,因为它是默认包含.

所以,你的代码应该是:

greaterThan(QT_MAJOR_VERSION, 4) {
    QT += widgets
}
Run Code Online (Sandbox Code Playgroud)

这里有一些未记载的qmake宝石:


eph*_*err 10

您可以像这样在一行中进行检查:

equals(QT_MAJOR_VERSION, 5):!lessThan(QT_MINOR_VERSION, 5) {
   QT += bluetooth
} else {
  message(Qt $$QT_VERSION Bluetooth not supported.)
}
Run Code Online (Sandbox Code Playgroud)

!lessThan there 代表更大或相等。


You*_*ouw 7

不确定从什么时候开始(Qt5我猜),有versionAtLeastversionAtMost测试功能.

用法示例:

!versionAtLeast(QT_VERSION, 5.11.2):error("Use at least Qt version 5.11.2")
Run Code Online (Sandbox Code Playgroud)

PS:发布这个答案,因为简单的谷歌搜索"qmake检查Qt版本"没有带来这些参考(但这篇文章的确如此).

  • 至少需要Qt 5.10.请看:https://github.com/qt/qtbase/commit/8a3e8856e5606ec616d4420ff8c4f77969432390 (3认同)

lpa*_*app 5

这是一个简单的测试。这就是我们在QtSerialPort以及 Qt 框架内的其他一些模块中所做的

lessThan(QT_MAJOR_VERSION, 5) {
...
} else {
...
}
Run Code Online (Sandbox Code Playgroud)

类似和常见的条件是:

contains(QT_MAJOR_VERSION, 5): ...
Run Code Online (Sandbox Code Playgroud)

或者:

greaterThan(QT_MAJOR_VERSION, 4): ...
Run Code Online (Sandbox Code Playgroud)

在这里,您可以找到我们一直在那里做的另一个 QtSerialPort 示例。