您可以使用人类可读的帮助器 QT_VERSION_CHECK 比较数字 QT_VERSION 宏,它将主要、次要和补丁号组合成 QT_VERSION 格式:
#if QT_VERSION == QT_VERSION_CHECK(5, 4, 1)
//...
#endif
来自 GCC 标头 C Macro - Dynamic #include 的连接想法
问题是我们没有 Qt 主要、次要和补丁版本的宏标记。只有数字 QT_VERSION。因此,获得所需的数字很棘手。可以使用qmake 变量QT_*_VERSION 将它们作为宏定义从.pro 文件传输:
DEFINES += QT_MAJOR_VERSION=$$QT_MAJOR_VERSION
DEFINES += QT_MINOR_VERSION=$$QT_MINOR_VERSION
DEFINES += QT_PATCH_VERSION=$$QT_PATCH_VERSION
现在这些宏版本可以在源文件中使用:
// To return as a string: "5.4.1/QtGui/private/qzipwriter_p.h"
#define qt_header__(x) #x
#define qt_header_(major,minor,patch) qt_header__(major.minor.patch/QtGui/private/qzipwriter_p.h)
#define qt_header(major,minor,patch) qt_header_(major,minor,patch)
// Simpler without stringification, however Qt Creator cannot follow
// that header
#define qt_header(major,minor,patch) <major.minor.patch/QtGui/private/qzipwriter_p.h>
#include qt_header(QT_MAJOR_VERSION, QT_MINOR_VERSION, QT_PATCH_VERSION)
最好使用字符串化变体 ("5.4.1/QtGui/private/qzipwriter_p.h")。在这种情况下,最新版本的 Qt Creator 可以遵循这样的 qt_header() 宏并相应地突出显示文本。