2014-07-22 60 views
13

Qt4和Qt5具有不同的头文件结构。所以,我需要检查qt的版本,包括不同的东西,例如:如何检查QT_VERSION以包含不同的头文件?

#if QT_VERSION >= 0x050000 
    #include <QtMultimedia> 
#endif 

然而,这似乎不工作。 QT_VERSION尚未定义。我怎么解决这个问题?

+1

它在头文件“”(或'“qglobal.h”')中声明。检查是否将它们包含在项目中。 – Tay2510

回答

16

由于@ Tay2510评论,QT_VERSION<QtGlobal>内声明。因此,您必须键入#include <QtGlobal>或另一个包含<QtGlobal>的标题,其版本依赖于preprocessor directives

<QObject><QCoreApplication>也可以用于访问QT_VERSION

下面是代码示例:

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

记住Qmake工程也应该处理的版本变化。 Here are changes that should be done when using the QT multimedia library

的.pro文件看起来应该是这样的:一旦

QT += core gui 

greaterThan(4, QT_MAJOR_VERSION): QT += widgets multimedia 
lessThan(5, QT_MAJOR_VERSION): CONFIG += mobility 
lessThan(5, QT_MAJOR_VERSION): MOBILITY += multimedia 
25

,你包括<QtGlobal>可以检查与宏:

#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) 

这是因为@Javier建议相同,只是一个不同的,对我来说更易读的语法

+2

尽管这个解决方案确实更具可读性(因此得到了我的赞赏),但应该注意的是'moc'无法理解它。例如,我想在可用的地方使用QOpenGLWidget(Qt> = 5.4),否则就会回退到QGLWidget。但是,只有当我使用'QT_VERSION> = 0x050400'而不是如果我使用这个答案的解决方案。 – josch

+0

@josch我从来没有遇到麻烦,尽管他们说QT4中的qmake不会扩展宏,所以它显然不适用于QT4。你有QT5这样的问题吗? – rightaway717

+0

对不起,我使用Qt 5.3.1 – josch

-1

可以像

#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0)) 
+2

与我的回答没有任何区别。为什么回复同样的事情? – rightaway717

+0

实际上,它存在于QT的来源中,如何使用它,所以只是在这里复制相同。 –