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