Qt è un framework per lo sviluppo di applicazioni multipiattaforma nato negli anni 90 dalla passione e perseveranza di Haavard Nord e Eirik Chambe-Eng, due programmatori finlandesi. Nel corso del tempo, Qt ha acquisito un elevato tasso di adozione in svariati settori dell'industria.
Basato sul linguaggio C++, il framework Qt ha maturato una eccezionale longevità per un prodotto nato per scopi puramente commerciali, soprattutto grazie al carattere innovativo di alcuni elementi della sua architettura di base.
Nel corso degli anni, diverse realtà imprenditoriali si sono succedute nella governance del progetto, orientando la crescita del framework secondo le proprie esigenze di mercato. Tuttavia l'adozione di Qt in molti progetti open source ha di fatto mediato le nuove esigenze con le prerogative originali, assicurando fino ad oggi un elevato grado di portabilità e compatibilità tra una versione e l'altra.
Caratteristiche principali
Il framework Qt ha un'architettura modulare con un elevato livello di astrazione rispetto la piattaforma sottostante.
Uno dei componenti principali è il widget toolkit, dedicato alla creazione di interfacce grafiche che emulano lo stile nativo della piattaforma in uso, o in alternativa lo stile definito dall'utente mediante l'uso di stylesheet che adottano una sintassi ispirata a quella di CSS.
Sebbene la possibilità di creare applicazioni con un look & feel nativo per svariate piattaforme, senza l'esigenza di modificare il codice, sia ancora oggi una delle principali attrative per l'uso di questo framework, esso tuttavia non è limitato all'implementazione di interfacce grafiche.
Il modulo principale, QtCore, include l'implementazione di svariate strutture dati, inclusi tipi generici, algoritmi di ordinamento e classi apposite per la manipolazione di stringhe di testo che includono anche operazioni basate su espressioni regolari.
Ad oggi esiste un'ampia intersezione tra le funzionalità offerte dal modulo di base di Qt e quelle delle librerie standard del linguaggio C++, soprattuto in seguito alle innovazioni apportate dallo standard C++11, al punto che alcune API Qt sono state deprecate in favore di queste ultime nelle versioni più recenti del framework.
Inoltre sono presenti svariati moduli per la gestione di connessioni di rete, del file system, la riproduzione e cattura di contenuti audio/video, integrazione con i principali DBMS, e unit testing.
Negli ultimi anni, come alternativa al widget toolkit, è stato introdotto un nuovo sistema per la definizione di interfacce grafiche basato sul paradigma dichiarativo, il Qt Quick, che nelle intenzioni garantisce una maggiore separazione tra le entità coinvolte nell'implementazione dell'interfaccia grafica e quelle che riguardano la business logic dell'applicazione.
Tuttavia quest'ultimo è meno stabile e meno assortito del widget toolkit, e si presta meglio allo sviluppo di interfacce grafiche personalizzate per sistemi embedded, rispetto che a quello di applicazioni desktop complesse.
Non ultima in termini di rilevanza, è la presenza di una estesa documentazione per gli sviluppatori, minuziosamente dettagliata per i moduli più vecchi e consolidati, un po' meno per quelli più recenti.
Quest'ultima è stata forse uno dei fattori che più hanno contribuito al successo di Qt rispetto framework altenativi open source come GTK e wxWidgets, non meno ricchi e validi.
Licenze d'uso
Qt oggi è un prodotto distributo dalla Qt Company in due versioni: una con licenza LGPL, che comporta alcune restrizioni sulle modalità di distribuzione, e una con licenza commerciale che garantisce anche supporto tecnico per gli sviluppatori.
Nella versione più recente del framework, la licenza LGPL si adatta perfettamente ad usi commerciali su tutte le piattaforme ad eccezione di quelle per sistemi embedded, per le quali è necessario disporre di una licenza d'uso commerciale.
La principale limitazione nell'uso della versione LGPL ad oggi, consiste nell'obbligo di distribuire le librerie Qt separatemente dal resto dell'applicazione che le usa, in qualità di librerie caricate dinamicamente. A parte che per specifiche esigenze, tale limitazione non risulta particolarmente limitante anche per scopi commerciali, e consente di contenere notevolmente i costi di sviluppo.
Tuttavia, fino all'accordo del 1998 siglato tra Trolltech, prima compagnia titolare dei diritti di utilizzo di Qt, e la allora neonata ma fervente comunità di sviluppo KDE, Qt non era un progetto propriamente open source secondo i canoni della Free Software Foundation ed in quanto tale, le condizioni di utilizzo erano passibili di cambiamenti arbitrari.
Tuttavia il grande contributo allo sviluppo di Qt offerto dalla comunità open source fu determinante nello spingere Trolltech a rilasciare con licenza GPL la versione del framework per Linux, e la KDE Free Qt Foundation fu creata in qualità di organismo di garanzia che vigila sul rilascio con cadenza di 12 mesi di almeno una versione aggiornate del framework con licenza GPL da parte dell'entità titolare dei diritti di sfruttamento economico del framework. In caso di inadempienza da parte di quest'ultima, a garanzia sia degli utenti commerciali che di quelli open source, l'intero framework verrebbe immediatamente rilasciato dalla KDE Free Qt Foundation con una licenza in stile BSD.
Nel 2009 infine, sotto l'egida di Nokia e dopo che la licenza GPL era stata estesa anche alle piattaforme Windows e MacOs, la versione 4.5 di Qt venne rilasciata con licenza LGPL, abilitando di fatto lo sviluppo di applicazioni proprietarie senza l'obbligo di acquisto di una licenza commerciale.
Perchè scegliere il Qt framework oggi
Qt, come ogni progetto software sufficientemente longevo, ha attraversato parecchie fasi di espansione e sviluppo, che non sempre hanno portato a risultati coerenti e consistenti.
Alcuni moduli soffrono di obsolescenza mentre altri sono fin troppo attivamente sviluppati, al punto da sacrificare la compatibilità di molte API tra versioni consecutive. Inoltre, non tutte le innovazioni delle ultime versioni dello standard C++ sono state recepite, ed in alcuni casi esse si scontrano con alcune caratteristiche architetturali del framework che difficilmente potranno essere alterate.
Tuttavia, buona parte delle API del framework sono consistenti ed intuitive. L'uso estensivo di Qt in molti progetti open source e non, ad esempio la suite Plasma Desktop di KDE, ha contribuito alla sua stabilità ed alla sua crescita.
Tutti questi fattori fanno oggi di Qt un prodotto maturo, con una codebase storica consolidata che, grazie alla garanzia open source e ad un grande bacino di utenti commerciali di tutti i profili, ha buone possibilità di supporto anche per gli anni a venire.
Nell'attesa che un nuovo framework GUI per applicazioni scritte in linguaggio C e C++ veda la luce e abbia un riscontro tale da garantirgli buona longevità e supporto, Qt rimane uno dei principali candidati per la creazione di applicazioni complesse, potenti e multipiattaforma.