valores qtc normales normal largo intervalo corto corregido correccion causas acortamiento qt qt4 qt5 qmake qtgui

qtc - ¿Cómo verificar la versión seleccionada de Qt en un archivo.pro?



qt largo causas (4)

Tengo varias versiones de Qt instaladas y necesito compilar mi proyecto con todas ellas.
Usando un archivo pro, no pude encontrar en la documentación cómo hacer una compilación condicional.

Idealmente, esto es lo que me gustaría hacer:

QT_VERSION = 5 # this can be 4, set manually if(QT_VERSION == 5) { QT += widgets } if(QT_VERSION == 4) { QT += gui }

Naturalmente, el comando if () no existe en los archivos pro.
¿Hay una mejor manera de hacer lo mismo?


Esta es una prueba simple para hacer Esto es lo que hemos estado haciendo en QtSerialPort y también algunos otros módulos dentro del marco Qt:

lessThan(QT_MAJOR_VERSION, 5) { ... } else { ... }

Las condiciones similares y comunes son:

contains(QT_MAJOR_VERSION, 5): ...

o:

greaterThan(QT_MAJOR_VERSION, 4): ...

Here puede encontrar otro ejemplo de QtSerialPort que hemos estado haciendo allí.


No estoy seguro desde cuándo (supongo que en Qt5), existen las funciones de prueba versionAtLeast y versionAtLeast .

Ejemplo de uso:

!versionAtLeast(QT_VERSION, 5.11.2):error("Use at least Qt version 5.11.2")

PD: Publicando esta respuesta, ya que el simple Google "qmake check Qt version" no trae estas referencias (pero esta publicación sí).


Puedes hacer cheques en una línea como esta:

equals(QT_MAJOR_VERSION, 5):!lessThan(QT_MINOR_VERSION, 5) { QT += bluetooth } else { message(Qt $$QT_VERSION Bluetooth not supported.) }

!lessThan ahi significa mayor o igual.


Puedes usar funciones y ámbitos condicionales aquí:

QT_VERSION = 5 # this can be 4, set manually equals(QT_VERSION, 5){ QT += widgets } equals(QT_VERSION, 4) { QT += gui }

Sin embargo, hay algunas cosas a las que debe prestar atención en su código original:

  1. Definir explícitamente la versión de Qt no es necesario, y puede provocarle un dolor de cabeza si olvidó cambiar eso en el archivo .pro. En su lugar, qmake define automáticamente una variable QT_MAJOR_VERSION para ti.

  2. El uso de equals funcionará en este caso. Sin embargo, como se indica a continuación, equals realiza una comparación de cadena. Sin embargo, es mejor usar greaterThan y lessThan porque su código dejará de funcionar automáticamente cuando intente compilarlo con Qt 6 (en algún lugar en el futuro).

  3. No es necesario agregar gui al QT , ya que se incluye de forma predeterminada.

Por lo tanto, su código debe ser:

greaterThan(QT_MAJOR_VERSION, 4) { QT += widgets }

Aquí hay algunas gemas indocumentadas qmake :

  • defined(func, type)

    Devuelve true si se define func ; el tipo debe ser test o replace , para que coincida con defineTest o defineReplace .

  • equals(var1, var)

    (También funciona como isEqual ).
    Devuelve verdadero si var1 es igual a var2 (comparación de cadenas).

  • lessThan(var1, var2)`

    Devuelve verdadero si var1 es menor que var2 (como un entero).

  • greaterThan(var1, var2)

    Devuelve verdadero si var1 es mayor que var2 (como un entero).

  • inFile(file, var, val)

    Devuelve verdadero si se define una variable var en el archivo especificado. Además, puede probar si tiene el valor solicitado.

  • load(string)

    Algo de una cruz entre include() y CONFIG += [feature] . load(foo) buscará un archivo llamado "foo.prf" en la ruta de la característica estándar y ejecutará su contenido inmediatamente. Las funciones contenidas en CONFIG se ejecutan en último lugar, después de que el archivo ".pro" haya terminado de procesarse. Al igual que include() , devolverá true si se encontró el archivo.