Los de­sa­rro­lla­do­res de apli­ca­cio­nes saben bien lo complejo que resulta la creación y es­tru­c­tu­ra­ción de los distintos co­m­po­ne­n­tes. Los co­m­po­ne­n­tes listos para usar de las bi­blio­te­cas y los fra­me­wo­r­ks de­sem­pe­ñan un papel muy im­po­r­ta­n­te, ya que no solo ayudan a es­ta­n­da­ri­zar el proceso de de­sa­rro­llo, sino que también lo facilitan. El marco mu­l­ti­pla­ta­fo­r­ma Qt, por ejemplo, reduce la cantidad de trabajo en el de­sa­rro­llo de in­te­r­fa­ces de usuario y en la creación de programas completos, donde además resulta de especial im­po­r­ta­n­cia facilitar la co­la­bo­ra­ción entre pro­gra­ma­do­res y de­sa­rro­lla­do­res. Todo ello queda ga­ra­n­ti­za­do por los co­m­po­ne­n­tes como el entorno de de­sa­rro­llo integrado Qt Creator, un lenguaje de­cla­ra­ti­vo propio y diversos módulos li­bre­me­n­te se­le­c­cio­na­bles.

¿Qué es Qt?

Debido a los problemas que les pla­n­tea­ban las he­rra­mie­n­tas para el de­sa­rro­llo de software mu­l­ti­pla­ta­fo­r­ma, Noweger Haavard Nord y Eirik Chambe-Eng co­me­n­za­ron en1990a de­sa­rro­llar Qt. Dos años más tarde, crearon la empresa Trolltech, adquirida po­s­te­rio­r­me­n­te por la mu­l­ti­na­cio­nal de co­mu­ni­ca­cio­nes Nokia y, en 2012, por la compañía de software fi­n­la­n­de­sa Digia. Así, desde 2014, la filial The Qt Company es la re­s­po­n­sa­ble del de­sa­rro­llo de he­rra­mie­n­tas y bi­blio­te­cas.

A lo largo de los años, Qt ha pasado de ser una sencilla bi­blio­te­ca de clases a un amplio framework, dejando así tras de sí numerosas ac­tua­li­za­cio­nes en su modelo de licencia. El actual modelo de licencia dual, que brinda al usuario la opo­r­tu­ni­dad de elegir entre una licencia pro­pie­ta­ria o licencias de código abierto GPL y LGPL, hace posible tanto el uso libre como la ex­plo­ta­ción comercial.

A pesar de que Qt se encuentra pro­gra­ma­do en C++, se utiliza un pre­pro­ce­sa­dor MOC (Meta-Object Compiler) para ampliar el lenguaje con funciones ele­me­n­ta­les como el mecanismo de señales y ranuras (signal y slots), que permite la co­mu­ni­ca­ción orientada a eventos entre los objetos del programa. Para ello, antes de la co­m­pi­la­ción, el pre­pro­ce­sa­dor genera código fuente C++ a partir del código Qt. En co­n­se­cue­n­cia, las apli­ca­cio­nes Qt pueden tra­du­ci­r­se con los co­m­pi­la­do­res co­n­ve­n­cio­na­les de C++, tales como GCC, ICC, MinGW o MSVC. Nuevas versiones de este framework ofrecen además acceso a QML, el lenguaje de­cla­ra­ti­vo propio, el cual aporta ventajas sobre todo en el de­sa­rro­llo de GUI. Aparte de las so­lu­cio­nes de lenguaje internas, existen distintas vi­n­cu­la­cio­nes de terceros para otros lenguajes de pro­gra­ma­ción, tales como Python, Ruby, Go, Java o PHP.

Con qmake (solución estándar) y Qbs (Qt Build Suite), el framework pone a di­s­po­si­ción dos sistemas propios de co­m­pi­la­ción, aunque también se pueden emplear otros sistemas como CMake. Asimismo, los usuarios cuentan con el entorno propio de de­sa­rro­llo integrado Qt Creator, que permite entre otras cosas la edición de código y el acceso rápido a los co­m­po­ne­n­tes se­le­c­cio­na­dos.

Resumen de los co­m­po­ne­n­tes más im­po­r­ta­n­tes de Qt

Con el tiempo, Qt se ha ido co­n­vi­r­tie­n­do en un framework cada vez más completo. De este modo, no solo se ha trabajado en aumentar la calidad del entorno de de­sa­rro­llo integrado Qt Creator y la co­m­pa­ti­bi­li­dad con más lenguajes y pla­ta­fo­r­mas, sino también en brindar a pro­gra­ma­do­res y de­sa­rro­lla­do­res una gama amplia de funciones. Así, el equipo de Qt confiere desde siempre una gran im­po­r­ta­n­cia a abarcar también campos de apli­ca­ción es­pe­cí­fi­cos de los sectores de la co­mpu­tación de es­cri­to­rio, así como de los di­s­po­si­ti­vos móviles.

Puesto que solo una pequeña parte de las apli­ca­cio­nes basadas en Qt están de­s­ti­na­das a todas las funciones, el framework empezó a dividirse en módulos a partir de su versión 4. Los módulos pueden se­le­c­cio­nar­se y co­m­bi­nar­se li­bre­me­n­te, lo que otorga una gran ve­r­sa­ti­li­dad en el de­sa­rro­llo tanto al equipo Qt como a los usuarios. Con la versión 5, el equipo Qt introdujo una división más en los módulos, di­fe­re­n­ciá­n­do­los en módulos básicos (Qt Es­se­n­tia­ls) y módulos co­m­ple­me­n­ta­rios para apli­ca­cio­nes es­pe­cia­les (Qt Add-ons).

Qt Es­se­n­tia­ls

Los Qt Es­se­n­tia­ls conforman la base de Qt para todas las pla­ta­fo­r­mas. Están di­s­po­ni­bles tanto en las pla­ta­fo­r­mas de de­sa­rro­llo co­m­pa­ti­bles como en las pla­ta­fo­r­mas finales evaluadas y resultan útiles para gran parte de las apli­ca­cio­nes de­sa­rro­lla­das. Los si­guie­n­tes módulos son parte esencial del framework:

Módulo De­s­cri­p­ción
Qt Core Clase central no gráfica, necesaria para todos los demás módulos.
Qt GUI Clase básica para el diseño de in­te­r­fa­ces gráficas de usuario. Contiene OpenGL.
Qt Mu­l­ti­me­dia Conjunto de tipos QML y clases C++ para contenido mu­l­ti­me­dia (audio y vídeo). Di­fe­re­n­tes in­te­r­fa­ces API para acceder a las funciones de cámara y radio
Qt Mu­l­ti­me­dia Widgets Clases basadas en widgets para la im­ple­me­n­ta­ción de funciones mu­l­ti­me­dia
Qt Network Conjunto de API para apli­ca­cio­nes que recurren a redes TCP/IP
Qt QML Framework y tipos del lenguaje de­cla­ra­ti­vo QML de Qt
Qt Quick Framework de­cla­ra­ti­vo para el de­sa­rro­llo de apli­ca­cio­nes altamente dinámicas con in­te­r­fa­ces gráficas de usuario pe­r­so­na­li­za­das QML
Qt Quick Controls 2 Extensión Qt Quick: tipos QML livianos y muy efi­cie­n­tes, que facilitan la creación de in­te­r­fa­ces gráficas
Qt Quick Dialogs Extensión Qt Quick: tipos para la creación e in­te­gra­ción con diálogos de sistema
Qt Quick Layouts Extensión Qt Quick: tipos QML para la di­s­po­si­ción de objetos en in­te­r­fa­ces de­sa­rro­lla­das
Qt Quick Test Framework de prueba para apli­ca­cio­nes QML donde los casos se escriben como funciones Ja­va­S­cri­pt
Qt SQL Clases para la in­te­gra­ción de bases de datos SQL
Qt Test Clases para pruebas de­ta­lla­das de apli­ca­cio­nes y bi­blio­te­cas Qt
Qt Widgets Conjunto de elementos UI para la creación de in­te­r­fa­ces gráficas de usuario clásicas, basadas en widgets, con Qt Designer

Como se ha me­n­cio­na­do, se emplearán unos u otros módulos en función de la apli­ca­ción. Pri­n­ci­pa­l­me­n­te, re­su­l­ta­rán decisivos los re­qui­si­tos con los que deba cumplir el proyecto en cuestión, aunque en otros casos serán de­te­r­mi­na­n­tes las he­rra­mie­n­tas con las que se desee trabajar; de este modo, se emplearán de forma estándar los módulos Qt Core y Qt GUI si quieres trabajar con qmake. Por el contrario, si eliges Qbs u otro sistema de co­m­pi­la­ción, no existirá esa de­pe­n­de­n­cia pre­de­fi­ni­da.

Para la creación de in­te­r­fa­ces gráficas de usuario, Qt ofrece también dos po­si­bi­li­da­des en cuanto a la elección del módulo central. Por un lado, existe la po­si­bi­li­dad de elegir Qt Designer, el cual pone a di­s­po­si­ción un editor WYSIWYG es­tre­cha­me­n­te re­la­cio­na­do con Qt Widgets; y, por otro, Qt Quick re­pre­se­n­ta una al­te­r­na­ti­va –incl. di­fe­re­n­tes módulos de am­plia­ción– que permite el de­sa­rro­llo en lenguaje QML.

Qt Add-ons

La etiqueta «Qt Add-ons» aporta a los usuarios de Qt un valor adicional para fines es­pe­cí­fi­cos. Mientras que algunos de estos módulos adi­cio­na­les –como los módulos centrales– han sido co­n­ce­bi­dos para todas las pla­ta­fo­r­mas de de­sa­rro­llo y pla­ta­fo­r­mas finales, la mayor parte de estos co­m­po­ne­n­tes solo es aplicable a de­te­r­mi­na­das pla­ta­fo­r­mas. Así, el add-on Qt Bluetooth que garantiza el acceso a hardware bluetooth, solo funciona con apli­ca­cio­nes para Android, iOS, Linux y macOS. Módulos como Qt Windows Extras, Qt Mac Extras o Qt Android Extras solo funcionan en programas para las pla­ta­fo­r­mas finales co­rre­s­po­n­die­n­tes.

Además, existen tres add-ons úni­ca­me­n­te di­s­po­ni­bles con la licencia comercial o la licencia GNU-GPLv3:

  • Qt Charts: co­m­po­ne­n­tes UI para la re­pre­se­n­ta­ción de lla­ma­ti­vos diagramas (basados en modelos de datos estáticos o dinámicos).
  • Qt Data Vi­sua­li­za­tion: co­m­po­ne­n­tes UI para la vi­sua­li­za­ción de datos en 3D.
  • Qt Virtual Keyboard: framework para la im­ple­me­n­ta­ción de di­fe­re­n­tes métodos de entrada y teclados virtuales en base a QML (pla­ta­fo­r­mas: Linux, Windows)
Nota

Desde la versión Qt 5, existen módulos de valor añadido («Value-Add Modules»), los cuales están di­s­po­ni­bles úni­ca­me­n­te con la licencia comercial. Entre ellos, se encuentra el módulo Qt para au­to­ma­ti­za­ción, que contiene diversas bi­blio­te­cas y he­rra­mie­n­tas para el de­sa­rro­llo de sistemas de au­to­ma­ti­za­ción como KNX (sistemas domóticos).

Qt Creator

El entorno de de­sa­rro­llo integrado (IDE) Qt Creator te brinda numerosas he­rra­mie­n­tas y me­ca­ni­s­mos au­to­ma­ti­za­dos durante todo el proceso de de­sa­rro­llo. Así, un asistente te ayuda en la creación de nuevos proyectos, guiándote paso a paso durante el proceso y creando au­to­má­ti­ca­me­n­te todos los archivos ne­ce­sa­rios. Además, el IDE acelera la escritura del código. A este respecto, el editor integrado ofrece ca­ra­c­te­rí­s­ti­cas como el resaltado de sintaxis, el au­to­co­m­ple­ta­do au­to­má­ti­co de código o la co­m­pro­ba­ción de errores.

Nota

Para los sistemas ope­ra­ti­vos de Windows (a partir de Windows 7), Ubuntu Linux (a partir de la versión 16.04) y macOS (a partir de 10.10) hay di­s­po­ni­bles paquetes binarios para la in­s­ta­la­ción de Qt Creator (incluido en la descarga de Qt).

Qt Creator integra las si­guie­n­tes he­rra­mie­n­tas además del editor de código:

  • qmake: es el sistema de co­m­pi­la­ción estándar de Qt y, como tal, se encuentra integrado en Qt Creator y puede se­le­c­cio­nar­se desde el menú. No obstante, el IDE es co­m­pa­ti­ble también con otros sistemas. Para utilizar Qbs, solo tendrás que abrir un archivo .qbs.
  • Qt Designer: Qt Designer es el programa nativo para diseñar y de­sa­rro­llar in­te­r­fa­ces gráficas de usuario con ayuda de Qt Widgets. El editor visual permite colocar y ajustar los widgets como se desee.
  • Qt Linguist: las apli­ca­cio­nes pueden lo­ca­li­zar­se di­re­c­ta­me­n­te en Qt Creator. De­sa­rro­lla­do­res, tra­du­c­to­res y gestores de entregas en­co­n­tra­rán aquí las he­rra­mie­n­tas apro­pia­das.
  • Qt Assistant: con Qt Assistant, Qt Creator brinda un acceso rápido a do­cu­me­n­ta­ción oficial del framework. Para ello, se dispone de una función de ayuda.

De­sa­rro­llo de software con señales y ranuras en Qt

Gracias a las vi­n­cu­la­cio­nes con Python, Ruby, Go, etc., Qt es co­m­pa­ti­ble con diversos lenguajes. El lenguaje nativo del framework continúa siendo en todo caso C++, aunque la extensión de este lenguaje orientado a objetos a través del pro­ce­sa­dor MOC permite disfrutar de nuevos aspectos y pa­ra­di­g­mas, como el mecanismo de señales (signals) y ranuras (slots). El concepto permite una co­mu­ni­ca­ción orientada a objetos entre los co­m­po­ne­n­tes de programa y re­pre­se­n­ta una al­te­r­na­ti­va versátil a las funciones directas de «callback». De este modo permite, por ejemplo, la vi­n­cu­la­ción de objetos o módulos sin necesidad de que estos se conozcan.

Nota

Qt es el artífice del concepto señal-ranura, y lo ha acuñado de forma decisiva a lo largo de los años. Ac­tua­l­me­n­te, otros muchos fra­me­wo­r­ks y bi­blio­te­cas, como Flow, utilizan también este modelo de vi­n­cu­la­ción.

Una señal es un mensaje que envía un objeto en cuanto entra un evento de­te­r­mi­na­do. Por su parte, una ranura es una función común que puede vi­n­cu­lar­se a una señal para que se ejecute siempre que se recibe dicha señal. Es posible vincular una señal a varias ranuras, de modo que se ejecuten varias funciones como resultado de un único evento. Asimismo, este concepto permite la vi­n­cu­la­ción de varias señales a una sola ranura, en cuyo caso se ejecutará la misma función con varios eventos.

Las señales y las ranuras ayudan a in­co­r­po­rar una función orientada a eventos en las in­te­r­fa­ces gráficas de usuario de las apli­ca­cio­nes. No obstante, en Qt no tendrás que perder el tiempo creando vi­n­cu­la­cio­nes señal-ranura una a una, ya que muchas de las clases del framework ofrecen acceso a diversas señales y ranuras pre­de­fi­ni­das. Aunque, si lo deseas, también tendrás la po­si­bi­li­dad de crearlas pe­r­so­na­l­me­n­te.

¿Cómo funciona el lenguaje de­cla­ra­ti­vo QML propio de Qt?

Desde la versión 4.7, Qt cuenta con el lenguaje de­cla­ra­ti­vo propio QML, ca­ra­c­te­ri­za­do, entre otros, por tener una sintaxis similar a JSON así como por ser co­m­pa­ti­ble con los im­pe­ra­ti­vos de Ja­va­S­cri­pt. Sin embargo, lo más im­po­r­ta­n­te es la de­s­cri­p­ción de­cla­ra­ti­va de los elementos de la GUI, re­s­po­n­sa­ble de la claridad del código. De este modo, QML aúna oraciones de tipo de­cla­ra­ti­vas e im­pe­ra­ti­vas en un único lenguaje de pro­gra­ma­ción, brindando al de­sa­rro­lla­dor un amplio abanico de po­si­bi­li­da­des. Si has elegido el módulo Qt Quick, di­s­po­n­drás con Qt Quick Compiler de la he­rra­mie­n­ta adecuada para la co­m­pi­la­ción del código QML en el lenguaje nativo C++. Además, podrás utilizar la he­rra­mie­n­ta de diseño del mismo nombre (Qt Quick Designer) en Qt Creator para trabajar con co­m­po­ne­n­tes QML pre­de­fi­ni­dos.

QML pone de ma­ni­fie­s­to sus ventajas es­pe­cia­l­me­n­te en el de­sa­rro­llo de GUI. Gracias a la co­n­si­de­ra­ble sencillez de su sintaxis y a la co­m­pa­ti­bi­li­dad con Ja­va­S­cri­pt, ofrece a los de­sa­rro­lla­do­res un acceso no­ta­ble­me­n­te mejor que C++. De este modo, pueden crearse sin problema in­te­r­fa­ces gráficas de usuario rea­li­za­das en JSON a través de la ex­po­r­ta­ción desde Photoshop, lo cual acelera su­s­ta­n­cia­l­me­n­te el proceso de de­sa­rro­llo. Aun cuando, en teoría, también resulta posible escribir todo el programa en QML, este lenguaje de­cla­ra­ti­vo rara vez se usa en la pro­gra­ma­ción de la lógica de la apli­ca­ción.

Nota

QML ha hecho que la creación de UI a través de widgets resulte in­ne­ce­sa­ria en muchos aspectos. Este lenguaje de­cla­ra­ti­vo pone de ma­ni­fie­s­to sus ventajas sobre todo con ani­ma­cio­nes, ma­que­ta­cio­nes co­m­ple­ta­me­n­te pe­r­so­na­li­za­das y co­m­po­ne­n­tes de control (portátil, pantalla táctil, etc.) Por el contrario, con los elementos de control tra­di­cio­na­les de es­cri­to­rio, como la barra de menús, la barra de he­rra­mie­n­tas o los co­m­po­ne­n­tes de «arrastrar y soltar», los widgets son una mejor solución, por lo que su uti­li­za­ción en entornos clásicos de es­cri­to­rio sigue estando am­plia­me­n­te extendida.

¿En qué pla­ta­fo­r­mas funciona Qt?

Qt es co­m­pa­ti­ble con diversas pla­ta­fo­r­mas de 32 y 64 bit. Para poder utilizar el framework, no se ne­ce­si­ta­rá más que GCC o cualquier otro co­m­pi­la­dor. Para la uti­li­za­ción de Qt Quick, se ne­ce­si­ta­rá aparte Open GL, DirectX o cualquier otra interfaz para la ge­ne­ra­ción de imágenes. El equipo de de­sa­rro­lla­do­res ha realizado la siguiente lista oficial de pla­ta­fo­r­mas co­m­pa­ti­bles con la versión actual de Qt:

Ventajas Versión Co­m­pi­la­dor
Windows 10, 8.1, 7, UWP (Universal Windows Platform) MSVC 2017, MSVC 2015, MinGW 5.3
Linux/X11 openSUSE 42.2, Red Hat En­te­r­pri­se Linux 6.6 y 7.2, Ubuntu 16.04 GCC (a partir de la versión 4.8), ICC
Android A partir de la versión 4.1 GCC, MinGW 5.3
macOS etc. macOS (a partir de la versión 10.11), iOS 10 y 11, tvOS 10 y 11, watchOS 3 y 4 Clang (Apple)
Sistemas embebidos Embedded Linux, Embedded Linux (Boot2Qt), QNX 6.6.0 y 7.0, INTEGRITY 11.4.4 GCC

¿Dónde se aplica Qt?

El proyecto de software más grande conocido en el que se utiliza el framework Qt es KDE Plasma (an­te­rio­r­me­n­te llamado KDE Plasma Wo­r­k­s­pa­ces). Se trata de una serie de entornos de es­cri­to­rio –desde la versión 5, co­n­ve­r­ti­do en un único entorno versátil– de la comunidad open source de KDE para distintos di­s­po­si­ti­vos (equipos de es­cri­to­rio, po­r­tá­ti­les, netbooks, tabletas y teléfonos in­te­li­ge­n­tes). Las di­s­po­si­cio­nes y los elementos de control de las di­fe­re­n­tes variantes de es­cri­to­rio están pe­r­fe­c­ta­me­n­te adaptados a los re­qui­si­tos de cada equipo gracias a Qt.

Otros ejemplos re­le­va­n­tes de software basados en Qt de­mue­s­tran la ve­r­sa­ti­li­dad de los es­ce­na­rios de apli­ca­ción del framework:

Mu­l­ti­me­dia:

  • El programa de edición de fotos Adobe Photoshop Elements
  • El programa de edición de fotos Adobe Photoshop Album
  • El re­pro­du­c­tor mu­l­ti­me­dia gratuito VLC Media Player
  • La apli­ca­ción para Linux del re­pro­du­c­tor de música en streaming Spotify

Co­mu­ni­ca­ción:

  • La edición Linux de la he­rra­mie­n­ta de co­mu­ni­ca­ción Skype
  • El servicio de me­n­sa­je­ría in­s­ta­n­tá­nea Telegram
  • El software de co­n­fe­re­n­cias TeamSpeak

In­te­r­ca­m­bio de archivos:

  • La pla­ta­fo­r­ma P2P Marabunta
  • El gestor de descargas de KDE KGet
  • El cliente de Bi­t­To­rre­nt Tra­n­s­mi­s­sion

He­rra­mie­n­tas de diseño en 3D:

  • El software de modelado en 3D Adobe Muse CC
  • El software de vi­r­tua­li­za­ción en 3D
  • El software CAD, Auto Q3D

Juegos:

  • Monkey Island
  • Dust Racing 2D

Otros:

  • El programa de ma­que­ta­ción Scribus
  • El software de ma­te­má­ti­cas Ma­the­ma­ti­ca
  • El software de notación y co­m­po­si­ción Sibelius

En resumen: un framework flexible para múltiples proyectos mu­l­ti­pla­ta­fo­r­ma

Qt es un framework tra­di­cio­nal que se ha adaptado co­n­s­ta­n­te­me­n­te a los re­qui­si­tos de las in­te­r­fa­ces gráficas de usuario actuales. No en vano, esta co­m­pi­la­ción de he­rra­mie­n­tas escritas en C++ es una de las so­lu­cio­nes para el de­sa­rro­llo de in­te­r­fa­ces gráficas de usuario in­de­pe­n­die­n­tes más aclamadas desde que se lanzara su primera versión hace más de veinte años. Re­s­po­n­sa­bles de esta fama son, sobre todo, he­rra­mie­n­tas como Qt Creator o el lenguaje de­cla­ra­ti­vo QML –im­ple­me­n­ta­do en las versiones más recientes–, los cuales no solo optimizan el proceso de trabajo en general, sino que también facilitan la co­la­bo­ra­ción entre di­se­ña­do­res y pro­gra­ma­do­res.

Ir al menú principal