Librerie GUI embedded a confronto: Qt

Come anticipato nell’articolo 4 librerie per GUI embedded a confronto, prendiamo in considerazione la prima di queste.

Per chi lavora in ambito embedded, Qt è LA libreria da usare per sviluppare GUI e, nel bene o nel male, il metro di paragone per tutte le altre librerie embedded. La libreria Qt è tecnicamente eccellente, con documentazione di altissimo livello, molto matura e con una grande azienda che la sviluppa.

Guardando un po’ più in là della sola parte GUI, il framework comprende tantissime funzionalità utili per sviluppare un prodotto embedded. Alcune che mi vengono in mente sono l’integrazione di un web engine (senza dover avere un browser esterno), librerie MQTT, CAN e Modbus, possibilità di visualizzare modelli 3D insieme ad elementi Qt Quick, possibilità di scrivere shader personalizzati.

Il mercato offre numerose aziende che offrono servizi di supporto e consulenza per cui è difficile restare bloccati o legati ad un unico fornitore.

I lati negativi si possono riscontrare principalmente nel costo della soluzione e nei termini di licenza, che anche nel caso della licenza commerciale sono da controllare attentamente.

Un’altra cosa a cui fare attenzione è la formazione delle persone: scrivere applicazioni QtQuick è profondamente diverso da scrivere applicazioni C++, per cui suggerisco sempre di cominciare con un corso QtQuick per il primo progetto.

Licenza

Il sistema di licensing di Qt è abbastanza complicato e dipende dai moduli software usati. Di base è GPLv3 o commerciale, ma alcuni moduli aggiungono LGPLv3 al mix. Alcuni esempi: i moduli Core e Quick vengono forniti con tutte e 3 le licenze, mentre i moduli CAN, Modbus o virtual keyboard sono solo licenza GPL o commerciale.

Rispettare i termini di licenza richiede attenzione, sia nel caso di (L)GPLv3 che nel caso commerciale. Vi rimando ai termini di licenza commerciali e ad un talk al QtDay.

Piattaforme supportate

Qt è presente praticamente su tutte le piattaforme. I target più forti sono Desktop e Linux embedded; il target MCU è supportato da una versione specializzata di Qt Quick.

La piattaforma mobile è supportata, ma è chiaro che non è il target principale del framework. Mancano tanti widget tipici delle piattaforme mobile e svariate integrazioni con le API di piattaforma. Esistono librerie esterne (es. Felgo), ma richiedono l’acquisto di licenze separate.

Infine, è possibile compilare l’applicazione per WebAssembly, per la visualizzazione su una pagina web. Lo metto per ultimo perché, sebbene funzionante, una tipica applicazione difficilmente potrà funzionare nella sua interezza con una semplice ricompilata; ad esempio, se l’applicazione agisce su file system oppure invoca processi o thread non funzionerà alla prima.

Linguaggi di programmazione

Qt è un framework C++, quindi il core dell’applicazione va scritto in C++ (C++11 fino a Qt 5.15, C++17 da Qt 6.0).

È presente un linguaggio specializzato per la creazione di UI, chiamato QML. È un linguaggio dichiarativo, richiede delle tecniche diverse rispetto al C++, ma rende la scrittura di codice UI più veloce.

Gestione immagini e font

Qt supporta tutti i principali formati di immagini e tutti i font. È possibile caricare a runtime nuovi font non presenti nel sistema e usarli con poco sforzo nella UI.

Tooling

Il tooling di contorno ad un progetto Qt è molto vasto. Sono presenti soluzioni per la localizzazione (aka I18N) e per il bundling delle risorse all’interno del binario dell’applicazione.

Qt Creator è un’ottima IDE per lo sviluppo di codice C++/Qml, con un profiler integrato per QML.

Purtroppo manca ancora una soluzione di hot reload del codice, si può sopperire usando il tool esterno GammaRay.

Esiste anche una soluzione per l’interazione con il lavoro dei designer tramite il tool Qt Design Studio, che può essere comoda per applicazioni veramente molto grandi, ma che ha un costo di licenza separato dal framework e non è particolarmente apprezzata dai designer stessi.

Scalabilità

Da MCU fino a desktop. Ampia libreria di widget a disposizione, integrazione con OpenGL, browser

Maturità

Non c’è dubbio che la tecnologia sia molto matura e conosciuta nel mercato. L’azienda produttrice (The Qt Company) è dedita da anni allo sviluppo della libreria e, nel caso in cui l’azienda dovesse fallire, esiste una clausola che la obbliga a rilasciare tutto il codice come GPL prima di chiudere.

Documentazione

La documentazione è sicuramente un punto di forza di Qt. È molto chiara e esaustiva ed esistono numerosissimi esempi per le varie parti del framework.

Conclusioni

Parafrasando un celebre detto: “nessuno è mai stato licenziato per aver scelto Qt nel prossimo progetto”. Questa libreria è la più avanzata dal punto di vista tecnico e gli strumenti di contorno rendono lo sviluppo di grandi applicazioni piuttosto semplice, ammesso di venire a patti con i termini della licenza. Fino alla versione attuale (6.2) non è particolarmente adatta allo sviluppo di applicazioni mobile, per cui se il vostro focus principale è il mobile, vi suggerisco di provare altre soluzioni.

Altri articoli della serie