Qt (Español)
Qt es una aplicación multiplataforma y herramientas de widget que utiliza el estandar C++ pero quehace un uso extensivo de un generador especial de código (llamado Meta Object Compiler o moc) junto con varios macros para enriquecer el lenguaje. Algunas de sus características más importantes son:
- Se ejecuta en la mayoría de entornos de escritorio y muchos de los entornos móviles.
- Soporte de internacionalización extendido.
- Una librería completa que provee acceso a base de datos SQL, parseo XML, tratamiento de hilos, soporte de red y una interfaz de programación de aplicaciones (API) multiplataforma unificada para el manejo de archivos.
El framework Qt es la base del software comunitario KDE como de otras aplicaciones importantes de código abierto y propietarias como VLC, VirtualBox, Mathematica y muchas otras.
Instalación
Qt 5.x está disponible en los repositorios oficiales. Versiones tradicionales de Qt (4.x y 3.x) estan disponibles desde el Arch User Repository (Español). Pueden instalarse con los siguientes paquetes:
- Qt 5.x está disponible en el paquete qt5-base con su documentación en el paquete qt5-doc.
- Qt 4.x está disponible en el paquete qt4AUR con su documentación en el paquete qt4-docAUR del AUR.
- Qt 3.x está disponible desde el AUR en el paquete qt3AUR con su documentación en el paquete qt3-docAUR[enlace roto: package not found] del AUR.
Herramientas Qt por defecto
Instalando qtchooserAUR[enlace roto: package not found] puede crear binarios Qt en /usr/bin
(p. ej. qmake), esta apunta por defecto a las versiones Qt5 (p. ej. qmake-qt5), que apunten a versiones anteriores de dichas herramientas (p. ej. qmake-qt4 o qmake-qt3).
Utilizar variables de entorno
Para definir las herramientas Qt por defecto puede crear la variable de entorno QT_SELECT
. Por ejemplo, para utilizar Qt4 establezca QT_SELECT=4
.
Utilizar ficheros de configuración
Puede establecer las herramientas Qt por defecto creando un enlace simbólico ~/.config/qtchooser/default.conf
a uno de los ficheros .conf que están en el directorio /etc/xdg/qtchooser/
. Por ejemplo, para Qt4 creé un enlace simbólico desde /etc/xdg/qtchooser/4.conf
a ~/.config/qtchooser/default.conf
:
$ ln -s/etc/xdg/qtchooser/4.conf
~/.config/qtchooser/default.conf
Aspecto
Qt5
Qt5 decide qué estilo usar basandose en que entorno de escritorio se esta utilizando:
- En KDE Plasma actualmente utiliza el estilo Qt seleccionado. Se puede configurar utilizando los Ajustes del sistema KDE (systemsettings). Estos ajustes se pueden encontrar en Aspecto > Estilo de las aplicaciones > Estilo de la aplicación.
- Otros entornos de escritorio utilizan Fusion.
Para obligar un estilo específico puede establecer la variable de entorno QT_STYLE_OVERRIDE
. Establezca la variable a gtk2
si quiere utilizar el tema GTK.
Las aplicaciones Qt5 también soportan la bandera -style
que se puede utilizar para lanzar aplicaciones Qt5 con un estilo específico.
Los siguientes aspectos están incluidos en Qt5: Fusion, Windows. Otros se pueden instalar desde los repositorios oficiales:
- Breeze — Arte, estilos y recursos para el estilo visual Breeze para el escritorio Plasma Desktop.
- Oxygen — Estilo KDE Oxygen.
- QtCurve — Un conjunto de estilos de widgets configurables para KDE y Gtk.
- https://invent.kde.org/system/qtcurve || qtcurve-qt5[enlace roto: package not found]
- Adwaita-Qt — Estilos para conseguir que las aplicaciones Qt se parezcan al entorno GNOME.
- Qt style plugins — Plugins para estilos adicionales de Qt5 incluido GTK, Cleanlooks, Motif, Plastique.
- Kvantum — Motor de temas basados en SVG personalizable con una gran variedad de estilos incorporados incluido imitaciones de algunos de los temas más populares de GTK como Adapta, Arc, Ambiance
Qt4
Las aplicaciones Qt4 intentarán imitar el comportamiento del entorno de escritorio en el que se ejecuta a no haya ser que encuentren algunos problemas o ajustes codificados.
- En KDE Plasma actualmente utiliza el estilo Qt seleccionado. Se puede configurar utilizando los Ajustes del sistema KDE (systemsettings). Estos ajustes se pueden encontrar en Aspecto > Estilo de las aplicaciones > Estilo de la aplicación.
- Otros entornos de escritorio utilizan Windows.
Para aquellos que quieran cambiar el aspecto y la sensación de las aplicaciones Qt4 la herramienta GUI de configuración Qt (qtconfig-qt4) está proporcionada por el paquete qt4AUR. Ofrece una interfaz simple para configurar la apariencia de las aplicaciones Qt4 incluido el estilo, colores, fuentes y muchas más opciones.
Qt mantiene toda la información de configuración en /etc/xdg/Trolltech.conf
(todo el sistema) o en ~/.config/Trolltech.conf
(específico por usuario). Es difícil navegar por el archivo porque contiene mucha información que no está relacionada con la apariencia pero cualquier ajuste que añada al final del archivo sobrescribirá cualquier valor previo (asegúrese de que añade sus modificaciones debajo de la cabecera de [Qt]).
Por ejemplo, para cambiar el tema a QtCurve añada:
~/.config/Trolltech.conf
... [Qt] style=QtCurve
Los siguientes estilos están incluidos en Qt4: CDE, Cleanlooks, GTK, Motif, Plastique, Windows. Otros se pueden instalar desde los repositorios oficiales o desde el AUR (muchos están escritos para el escritorio KDE Plasma):
- Breeze — Arte, estilos y recursos para el estilo visual Breeze para el escritorio Plasma Desktop.
- https://invent.kde.org/plasma/breeze || breeze-kde4AUR[enlace roto: package not found]
- Adwaita-Qt — Estilos para conseguir que las aplicaciones Qt se parezcan al entorno GNOME.
Plantillas de estilos Qt
Una forma interesante para personalizar el aspecto y la sensación de una aplicación Qt es utilizar plantillas de estilos que son simples archivos CSS. Utilizando plantillas de estilos puede cambiar la apariencia de cada widget de la aplicación.
Para ejecutar una aplicación con un estilo diferente simplemente ejecute:
$ qt_application -stylesheet style.qss
Para más información en plantillas de estilos Qt vea la documentación oficial o otros tutoriales. Como ejemplo de una plantilla vea esta modificación de Dolphin.
GTK y Qt
Si tiene aplicaciones GTK y Qt puede que no se vean exactamente bien unidas. Si desea que su estilo GTK coincida con sus estilos Qt lea look uniforme para las aplicaciones Qt y GTK.
Configuración de aplicaciones Qt5 en otros entornos que KDE Plasma
A diferencia de Qt4, Qt5 no tiene una utilidad qtconfig para configurar fuentes, iconos y estilos. En lugar de eso Qt5 intentará utilizar los ajustes del entorno de escritorio en ejecución. En KDE Plasma o GNOME esto funciona bien pero en otros entornos de escritorio menos populares o gestores de ventanas puede resultar que los iconos desaparezcan en las aplicaciones Qt5. Una forma de resolver esto es ejecutar un falso entorno de escritorio estableciendo XDG_CURRENT_DESKTOP=KDE
o GNOME
y después utilizar la correspondiente aplicación de configuración para establecer el conjunto deseado de iconos.
Otra solución proporcionada por el paquete qt5ct que proporciona un Qt5 QPA independiente del entorno de escritorio y de la herramienta de configuración. Después de instalar el paquete ejecute qt5ct
para establecer un tema de iconos y establecer la variable de entorno QT_QPA_PLATFORMTHEME=qt5ct
para que las aplicaciones Qt tomen dichos ajustes. Alternativamente puede utilizar --platformtheme qt5ct
como argumento de la aplicación Qt5.
Si se recibe los siguientes errores y algunos iconos no aparecen en algunas aplicaciones instale oxygen y oxygen-icons:
Icon theme "oxygen" not found. Icon theme "oxygen" not found. Error: standard icon theme "oxygen" not found!
Desarrollo
Plataformas soportadas
Qt soporta la mayoría de plataformas que están disponibles a dia de hoy, incluso las mas oscuras, con más ports apareciendo de vez en cuando. Para una lista más completa vea el artículo de la Wikipedia Qt.
Android
Antes de nada necesita el Android SDK y el NDK. Instale el SDK android-sdkAUR (algunas herramientas se han quitado) o android-sdk-25.2.5AUR[enlace roto: package not found] y el NDK android-ndkAUR desde el AUR o utilizando Android Studio.
SDK requiere de OpenJDK en su version <= 8. En estos momentos está disponibles el OpenJDK en su versión 7 y 8 pero, para evitar problemas de construcción más tarde, utilice este último.
Lo siguiente que va a necesitar es Qt 5 para Android. Puede instalarlo desde el AUR como se describe debajo o construirlo usted mismo. Puede encontrar las instrucciones para la compilación están en la wiki de Qt.
En caso de problemas puede querer visitar los problemas conocidos.
- android-armv7a-eabi-qt5AUR[enlace roto: package not found] - armeabi-v7a
- android-x86-qt5AUR[enlace roto: package not found] - x86
- android-x86-64-qt5AUR[enlace roto: package not found] - x86_64
O puede utilizar un instalador Qt[enlace roto 2023-05-06]. Para un listado completo vea los instaladores oficiales Qt.
Herramientas
Las siguientes son herramientas oficiales Qt:
- Qt Creator — Un IDE multiplataforma a medida de Qt que soporta todas sus características.
- Qt Linguist — Un conjunto de herramientas que acelera la traducción y la internacionalización de aplicaciones Qt.
- https://doc.qt.io/qt-5/qtlinguist-index.html || Qt 5: qt5-tools, Qt 4: qt4AUR
- Qt Assistant — Un lector de documentación redistribuido y configurable para los archivos qch de Qt.
- https://doc.qt.io/qt-5/qtassistant-index.html || Qt 5: qt5-tools, Qt 4: qt4AUR
- Qt Designer — Un potente constructor de diseños y formularios multiplataforma con GUI para los widgets Qt.
- https://doc.qt.io/qt-5/qtdesigner-manual.html || Qt 5: qt5-tools, Qt 4: qt4AUR
- Qt Quick Designer — Un editor visual para los archivos QML que soportan WYSIWYG. Le permite rápidamente diseñar y construir aplicaciones rápidas Qt y componentes desde cero.
- qmlscene — Una herramienta para cargar documentos QML que hace que desarrollar y depurar aplicaciones QML rápidamente sea fácil.
- https://doc.qt.io/qt-5/qtquick-qmlscene.html || Qt 5: qt5-declarative, Qt 4 QML Viewer: qt4AUR
- qmake — Una herramienta que ayuda a simplificar el proceso de compilación para el desarrollo de proyectos compatibles con distintas plataformas, similar a cmake pero con menos y mas específicas opciones para aplicaciones Qt.
- https://doc.qt.io/qt-5/qmake-manual.html || Qt 5: qt5-base, Qt 4: qt4AUR
- uic — Una herramienta que lee los ficheros XML *.ui y genera los ficheros C++ correspondientes.
- https://doc.qt.io/qt-5/uic.html || Qt 5: qt5-base, Qt 4: qt4AUR
- rcc — Una herramienta que se utiliza para incrustar recursos (como fotos) dentro de la aplicación Qt en el proceso de compilación. Funciona generando un archivo fuente C++ que contiene los datos especificados en un archivo de recursos Qt (.qrc).
- https://doc.qt.io/qt-5/rcc.html || Qt 5: qt5-base, Qt 4: qt4AUR
- moc — Una herramienta que maneja las extensiones C++ de Qt (las señales y el mecanismos de ranuras, la información de tipos en tiempo de ejecución, el sistema de propiedades dinámico, etc.).
- https://doc.qt.io/qt-5/moc.html || Qt 5: qt5-base, Qt 4: qt4AUR
Enlaces
Qt tiene enlaces de todos los lenguajes más populares, para una lista completa vea esta lista.
Los siguientes ejemplos muestran un pequeño '¡Hola mundo!' en una ventana.
C++
- Paquete: qt5-base
- Web: https://www.qt.io/developers/
- Compilación:
g++ $(pkg-config --cflags --libs Qt5Widgets) -fPIC -o hello hello.cpp
- Ejecutar con:
./hello
hello.cpp
#include <QApplication> #include <QLabel> int main(int argc, char **argv) { QApplication app(argc, argv); QLabel hola("¡Hola mundo!"); hola.show(); return app.exec(); }
QML
- Paquete: qt5-declarative.
- Web: https://doc.qt.io/qt-5/qtquick-qmlscene.html
- Ejecutar con:
qmlscene hello.qml
hello.qml
import QtQuick 2.3 Rectangle { id: page width: 400; height: 100 color: "lightgray" Text { id: holaText text: "¡Hola mundo!" anchors.horizontalCenter: page.horizontalCenter anchors.verticalCenter: page.verticalCenter font.pointSize: 24; font.bold: true } }
Python (PyQt)
- Paquete:
- python-pyqt5 - Enlaces de python 3
- python2-pyqt5[enlace roto: package not found] - Enlaces de python 2
- Web: https://riverbankcomputing.com/software/pyqt/intro
- Ejecutar con:
python hello-pyqt.py
opython2 hello-pyqt.py
.
hello-pyqt.py
import sys from PyQt5 import QtWidgets app = QtWidgets.QApplication(sys.argv) label = QtWidgets.QLabel("¡Hola mundo!") label.show() sys.exit(app.exec_())
Python (PySide2)
- Paquete: pyside2AUR
- Web: https://wiki.qt.io/Qt_for_Python
- Ejecutar con:
python hello-pyside.py
hello-pyside2.py
import sys from PySide2.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("¡Hola mundo!") label.show() sys.exit(app.exec_())
C#
Vea QtSharp.
Solución de problemas
Desactivar/Cambiar el comportamiento del log de journal Qt
Cuando se utiliza When using KDE y/o cualquier otra información de depuración Qt del entorno de escritorio es frecuente que se guarde en el registro de systemd.
Establezca QT_LOGGING_RULES
como una variable de entorno para cambiar este comportamiento, p. ej. para desactivar completamente el registro:
/etc/environment
QT_LOGGING_RULES='*=false'
Para desactivar solo el registro del depurador utilice QT_LOGGING_RULES="*.debug=false"
.
Tema de iconos no se aplica
Desde Qt 5.1 el soporte SVG se ha movido a un módulo. Desde que qt5-base no depende de qt5-svg puede ocurrir que qt5-base este instalado pero qt5-svg no. Esto causa un comportamiento no deseado en el comportamiento con el tema de iconos. Desde que no se soporta SVG los iconos se omiten silenciosamente y hace que parezca que el tema de iconos no se esta utilizando. Instalando explícitamente qt5-svg soluciona el problema.
El tema no se aplica a las aplicaciones root
Como el fichero de temas del usuario ($XDG_CONFIG_HOME/Trolltech.conf
) no se puede leer desde otras cuentas el tema seleccionado no se aplicará a las aplicaciones X que se ejecuten como root.
Las posibles soluciones incluyen:
- Creación de enlaces simbólicos, p. ej.
# ln -s /home/[username]/.config/Trolltech.conf /etc/xdg/Trolltech.conf
- Configurar un archivo de tema para todo el sistema:
/etc/xdg/Trolltech.conf
- Ajustar el tema como root.
Estilo Qt4 no se respeta
Si las aplicaciones puras Qt4 (no KDE) no toman su estilo seleccionado Qt4 probablemente necesite decirle a Qt4 cómo encontrar los estilos de KDE (Oxygen, Phase etc.). Necesita ajustar la variable de entorno QT_PLUGIN_PATH
. Por ejemplo:
QT_PLUGIN_PATH=$HOME/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/
qtconfig-qt4
debe ser capaz de encontrar sus estilos de kde y todo volverá a verse bien de nuevo.
Alternativamente puede crear un enlace simbólico desde su directorio de estilos de Qt4 a uno de los estilos de KDE4:
# ln -s /usr/lib/{kde,qt}4/plugins/styles/theme_name
Todas las aplicaciones basadas en Qt5 fallan al ejecutarse después de una actualización de Qt5
Si recibe un error similar a este
Qt FATAL: Cannot mix incompatible Qt library (version 0x50900) with this library (version 0x50901)
probablemente esté utilizando una plataforma de temas Qt5 o un plugin de estilo que no se ha reconstruido en la última versión de Qt5. Normalmente estos utilizan cabeceras privadas de Qt, es decir, que dependen de una versión exacta de Qt y no simplemente una coincidencia de nombre. Intente adivinar que estilo está utilizando estableciendo las variables de entorno QT_STYLE_OVERRIDE
y QT_QPA_PLATFORMTHEME
y reconstruya el paquete del AUR que lo proporciona.