2014-07-22 3 views
13

Qt4 und Qt5 haben unterschiedliche Organisation von Header-Dateien. Also muss ich die qt-Version überprüfen verschiedene Dinge gehören zum Beispiel:Wie überprüfe ich QT_VERSION, um verschiedene Header einzubeziehen?

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

jedoch scheint dies nicht funktioniert. Die QT_VERSION wurde nicht definiert. Wie kann ich dieses Problem lösen?

+1

Es ist in der Header-Datei '' (oder '" qglobal.h "') deklariert. Überprüfen Sie, ob Sie sie in das Projekt aufgenommen haben. – Tay2510

Antwort

16

Wie @ Tay2510 kommentierte, QT_VERSION ist in <QtGlobal> deklariert. Aus diesem Grund müssen Sie #include <QtGlobal> oder eine andere Kopfzeile eingeben, die <QtGlobal> enthält, bevor die Versionsnummer preprocessor directives.

<QObject> und <QCoreApplication> können auch verwendet werden, um auf QT_VERSION zuzugreifen. Hier

ist ein Beispiel für den Code:

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

Denken Sie daran, dass das qmake Projekt auch Version Variationen behandeln soll. Here are changes that should be done when using the QT multimedia library:

Die .proDatei etwas aussehen sollte:

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

Sobald Sie <QtGlobal> enthalten können Sie überprüfen, ob mit Makros: vorgeschlagen

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

Es ist das gleiche wie @Javier , nur eine andere, besser lesbar für mich, Syntax

+2

Während diese Lösung in der Tat besser lesbar ist (und somit mein upvote bekam), sollte angemerkt werden, dass "moc" es nicht verstehen kann. Zum Beispiel wollte ich QOpenGLWidget wo verfügbar (Qt> = 5.4) verwenden und ansonsten auf QGLWidget zurückgreifen. Aber das funktioniert nur, wenn ich 'QT_VERSION> = 0x050400' verwende und nicht, wenn ich die Lösung dieser Antwort verwende. – josch

+0

@josch Ich hatte nie Probleme damit, obwohl sie sagen, dass qmake von QT4 Makros nicht erweitert, also funktioniert es offensichtlich nicht für QT4. Hast du ein Problem mit QT5? – rightaway717

+0

Richtig, ich habe es mit Qt 5.3.1 – josch

-1

kann wie

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

Es gibt keinen Unterschied mit meiner Antwort. Warum dasselbe antworten? – rightaway717

+0

Eigentlich war es in Quellen von QT vorhanden, wie man es benutzt, also kopiere es gleich hier. –

Verwandte Themen