¿Cómo verificar QT_VERSION para incluir un encabezado diferente?

2 minutos de lectura

Qt4 y Qt5 tienen una organización diferente de archivos de encabezado. Entonces necesito verificar la versión qt para incluir diferentes cosas, por ejemplo:

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

sin embargo, esto parece no funcionar. No se ha definido QT_VERSION. ¿Como puedó resolver esté problema?

  • Está declarado en el archivo de cabecera. <QtGlobal> (o "qglobal.h"). Compruebe si los ha incluido en el proyecto.

    – Tay2510

    23 de julio de 2014 a las 3:18

Tan pronto como incluyas <QtGlobal> Puedes verificar eso con macros:

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

Es lo mismo que sugirió @Javier, solo una sintaxis diferente, más legible para mí.

  • Si bien esta solución es más legible (y por lo tanto obtuvo mi voto a favor), debe tenerse en cuenta que moc es incapaz de entenderlo. Por ejemplo, quería usar QOpenGLWidget donde estuviera disponible (Qt >= 5.4) y, de lo contrario, recurrir a QGLWidget. Pero eso solo funciona si uso QT_VERSION >= 0x050400 y no si uso la solución de esta respuesta.

    – josé

    13 de marzo de 2016 a las 9:29


  • @josch Nunca tuve problemas con eso, aunque dicen que qmake de QT4 no expande las macros, por lo que obviamente no funciona para QT4. ¿Tiene ese problema con QT5?

    – de inmediato717

    13/03/2016 a las 16:20

  • Correcto, lo tengo con Qt 5.3.1

    – josé

    13/03/2016 a las 21:21

Como comentó @Tay2510, QT_VERSION se declara dentro de <QtGlobal>. Como resultado, debe escribir #include <QtGlobal> u otro encabezado que incluya <QtGlobal>antes de la versión dependiente directivas del pre procesador.

<QObject> y <QCoreApplication> también se puede usar para acceder QT_VERSION.

Aquí hay un ejemplo del código:

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

Recuerde que el proyecto qmake también debe manejar variaciones de versión.
Estos son los cambios que se deben hacer al usar la biblioteca multimedia QT:

El archivo .pro debería parecerse a:

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

¿Ha sido útil esta solución?