C++ 如何检查QT_版本以包含不同的标题?

C++ 如何检查QT_版本以包含不同的标题?,c++,qt,C++,Qt,Qt4和Qt5具有不同的头文件组织。所以我需要检查qt版本以包含不同的内容,例如: #if QT_VERSION >= 0x050000 #include <QtMultimedia> #endif #如果QT_版本>=0x050000 #包括 #恩迪夫 然而,这似乎不起作用。尚未定义QT_版本。如何解决这个问题?正如@Tay2510评论的那样,QT\u版本在中声明。因此,您必须在依赖版本之前键入#include或另一个包含的标题 和也可用于访问QT\u版本 下面是

Qt4和Qt5具有不同的头文件组织。所以我需要检查qt版本以包含不同的内容,例如:

#if QT_VERSION >= 0x050000
    #include <QtMultimedia>
#endif
#如果QT_版本>=0x050000
#包括
#恩迪夫

然而,这似乎不起作用。尚未定义QT_版本。如何解决这个问题?

正如@Tay2510评论的那样,
QT\u版本在
中声明。因此,您必须在依赖版本之前键入
#include
或另一个包含
的标题

也可用于访问
QT\u版本

下面是一个代码示例:

#include <QtGlobal>
#if QT_VERSION >= 0x050000
    #include <QApplication>
#else
    #include <QtGui/QApplication>
#endif

只要包含
,就可以使用宏检查:

#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
#如果QT_版本

它与@Javier建议的相同,只是语法不同,对我来说更易读,它在头文件
(或
“qglobal.h”
)中声明。检查您是否将它们包括在项目中。虽然此解决方案确实更具可读性(因此得到了我的支持),但应该注意的是,
moc
无法理解它。例如,我想在可用的地方使用QOpenGLWidget(Qt>=5.4),否则就回到QGLWidget。但是,只有当我使用
QT_VERSION>=0x050400
时,这才有效,如果我使用这个答案的解决方案,则不起作用。@josch我从来没有遇到过这样的问题,尽管他们说qmake from QT4不展开宏,所以它显然不适用于QT4。您对QT5有这样的问题吗?正确,我对QT5.3.1有这样的问题
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)