Qt4和Qt5具有不同的头文件结构。所以,我需要检查qt的版本,包括不同的东西,例如:如何检查QT_VERSION以包含不同的头文件?
#if QT_VERSION >= 0x050000
#include <QtMultimedia>
#endif
然而,这似乎不工作。 QT_VERSION尚未定义。我怎么解决这个问题?
Qt4和Qt5具有不同的头文件结构。所以,我需要检查qt的版本,包括不同的东西,例如:如何检查QT_VERSION以包含不同的头文件?
#if QT_VERSION >= 0x050000
#include <QtMultimedia>
#endif
然而,这似乎不工作。 QT_VERSION尚未定义。我怎么解决这个问题?
由于@ 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
,你包括<QtGlobal>
可以检查与宏:
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
这是因为@Javier建议相同,只是一个不同的,对我来说更易读的语法
尽管这个解决方案确实更具可读性(因此得到了我的赞赏),但应该注意的是'moc'无法理解它。例如,我想在可用的地方使用QOpenGLWidget(Qt> = 5.4),否则就会回退到QGLWidget。但是,只有当我使用'QT_VERSION> = 0x050400'而不是如果我使用这个答案的解决方案。 – josch
@josch我从来没有遇到麻烦,尽管他们说QT4中的qmake不会扩展宏,所以它显然不适用于QT4。你有QT5这样的问题吗? – rightaway717
对不起,我使用Qt 5.3.1 – josch
可以像
#if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
与我的回答没有任何区别。为什么回复同样的事情? – rightaway717
实际上,它存在于QT的来源中,如何使用它,所以只是在这里复制相同。 –
它在头文件“”(或'“qglobal.h”')中声明。检查是否将它们包含在项目中。 –
Tay2510