2014-07-22 121 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的來源中,如何使用它,所以只是在這裏複製相同。 –