Chi si occupa dello sviluppo di ap­pli­ca­zio­ni conosce le dif­fi­col­tà legate alla creazione e alla strut­tu­ra­zio­ne dei singoli com­po­nen­ti. Librerie e framework con com­po­nen­ti im­pie­ga­bi­li svolgono un ruolo im­por­tan­te. Questi non solo fa­vo­ri­sco­no la stan­dar­diz­za­zio­ne del processo di sviluppo, ma lo sem­pli­fi­ca­no anche. Il framework tra piat­ta­for­me Qt, ad esempio, consente un enorme risparmio di lavoro nello sviluppo di in­ter­fac­ce utente grafiche e di interi programmi, fo­ca­liz­zan­do­si sulla col­la­bo­ra­zio­ne ottimale tra designer e svi­lup­pa­to­ri. A tale scopo com­po­nen­ti come l’ambiente di sviluppo integrato Qt Creator ri­chie­do­no un proprio lin­guag­gio di markup e vari moduli li­be­ra­men­te se­le­zio­na­bi­li.

Cos’è Qt?

Non essendo sod­di­sfat­ti degli strumenti per lo sviluppo del software mul­ti­piat­ta­for­ma, nel 1990 i due norvegesi Haavard Nord e Eirik Chambe-Eng ini­zia­ro­no a lavorare allo sviluppo di Qt. Due anni dopo fondarono l’impresa Trolltech, che fu poi acquisita dal gruppo di te­le­co­mu­ni­ca­zio­ni Nokia e nel 2012 dall’azienda di software fin­lan­de­se Digia. Dal 2014 è l’impresa con­trol­la­ta da Digia, The Qt Company, ad occuparsi dello sviluppo.

Nel corso degli anni, Qt si è svi­lup­pa­ta da semplice libreria di classi ad ampio framework e ha subito numerosi cambi del modello di licenza. L’attuale sistema di licenza duale, che lascia all’utente la scelta tra una licenza pro­prie­ta­ria e le licenze open source GPL e LGPL, rende possibile sia l’uso col­let­ti­vo che quello com­mer­cia­le.

Qt è pro­gram­ma­ta in C++ e il lin­guag­gio di pro­gram­ma­zio­ne viene ampliato mediante il pre­pro­ces­so­re MOC (Meta-Object Compiler) con ca­rat­te­ri­sti­che come il mec­ca­ni­smo di segnali e slot (consente la co­mu­ni­ca­zio­ne legata agli eventi tra oggetti di programma). Pertanto, il pre­pro­ces­so­re genera il C++ standard ancora prima della com­pi­la­zio­ne dal codice sorgente Qt. Di con­se­guen­za, le ap­pli­ca­zio­ni Qt con com­pi­la­to­ri C++ comuni come GCC, ICC, MinGW o MSVC possono essere tradotti. Le più moderne versioni del framework offrono l’accesso al lin­guag­gio di markup di Qt, QML, che consente delle sem­pli­fi­ca­zio­ni in par­ti­co­la­re nello sviluppo di GUI. Oltre a queste soluzioni lin­gui­sti­che interne, sono presenti vari col­le­ga­men­ti messi a di­spo­si­zio­ne da terzi per altri linguaggi di pro­gram­ma­zio­ne come Python, Ruby, Go, Java o PHP.

Con qmake (soluzione standard) e Qbs (Qt Build Suite), il framework dispone di due sistemi di co­stru­zio­ne propri, con­sen­ten­do anche l’impiego di altri sistemi come CMake. Inoltre, gli utenti possono uti­liz­za­re il proprio ambiente di sviluppo integrato Qt Creator, che dispone di un editor codice e consente un accesso rapido ai com­po­nen­ti se­le­zio­na­ti.

Sintesi dei com­po­nen­ti Qt più im­por­tan­ti

Con il tempo, il framework Qt è diventato sempre più ampio. Così non si lavora solo in­ten­sa­men­te alla qualità dell’ambiente di sviluppo Qt Creator integrato e al supporto lin­gui­sti­co e della piat­ta­for­ma, ma anche per mettere a di­spo­si­zio­ne di pro­gram­ma­to­ri e designer un’ampia gamma di funzioni. Il team Qt dà da sempre valore alla copertura di scenari ap­pli­ca­ti­vi specifici del settore desktop e mobile.

Dato che solo po­chis­si­me ap­pli­ca­zio­ni basate su Qt contano su una gamma di funzioni completa, il framework è suddiviso in moduli a partire dalla versione 4. Questi possono essere se­le­zio­na­ti e as­sem­bla­ti, ga­ran­ten­do una fles­si­bi­li­tà elevata sia al team Qt che agli utenti. Con la versione 5, il team Qt ha in­tro­dot­to un’ulteriore sud­di­vi­sio­ne di moduli in modulo base (Qt Es­sen­tials) e modulo sup­ple­men­ta­re per scopi d’impiego speciali (Qt Add on).

Qt Es­sen­tials

I Qt Es­sen­tials co­sti­tui­sco­no la base di Qt tra piat­ta­for­me. Sono di­spo­ni­bi­li su tutte le piat­ta­for­me di sviluppo sup­por­ta­te e su quelle di de­sti­na­zio­ne testate e sono rilevanti o utili per gran parte delle ap­pli­ca­zio­ni svi­lup­pa­te. I seguenti moduli fanno parte dei com­po­nen­ti es­sen­zia­li del framework:

modulo de­scri­zio­ne
Qt Core Classi prin­ci­pa­li non grafiche, ne­ces­sa­rie per tutti gli altri moduli
Qt GUI Classi base per la pro­get­ta­zio­ne di in­ter­fac­ce utente grafiche, incluso OpenGL
Qt Mul­ti­me­dia Im­po­sta­zio­ne di tipi QML e classi C++ per la tra­sfor­ma­zio­ne di contenuti mul­ti­me­dia­li (audio/video); API per l’accesso alla fun­zio­na­li­tà camera e radio
Qt Mul­ti­me­dia Widgets Classi basate su widget per l’im­ple­men­ta­zio­ne di fun­zio­na­li­tà mul­ti­me­dia­li
Qt Network API per ap­pli­ca­zio­ni con accesso ai network TCP/IP
Qt QML Framework e tipi di lin­guag­gio di markup QML di Qt
Qt Quick Framework di­chia­ra­ti­vo per lo sviluppo di ap­pli­ca­zio­ni altamente dinamiche con in­ter­fac­ce di comando QML su misura
Qt Quick Controls 2 Am­plia­men­to Qt-Quick: tipi di QML leggeri, molto ef­fi­cien­ti che sem­pli­fi­ca­no la creazione di in­ter­fac­ce
Qt Quick Dialogs Am­plia­men­to Qt-Quick: Tipi per la creazione e l’in­te­ra­zio­ne con dialoghi di sistema
Qt Quick Layouts Am­plia­men­to Qt-Quick: Tipi di QML per la di­spo­si­zio­ne di oggetti nell’in­ter­fac­cia svi­lup­pa­ta
Qt Quick Test Framework di prova per ap­pli­ca­zio­ni QML; i test sono descritti come funzioni Ja­va­Script
Qt SQL Classi per l’in­te­gra­zio­ne di banche dati SQL
Qt Test Classi per test det­ta­glia­ti di ap­pli­ca­zio­ni e librerie Qt
Qt Widgets Im­po­sta­zio­ne di elementi UI per la creazione di in­ter­fac­ce utente classiche, basate su widget con designer Qt

I moduli impiegati cambiano, come men­zio­na­to, da ap­pli­ca­zio­ne ad ap­pli­ca­zio­ne. Sono decisivi in­nan­zi­tut­to i requisiti che il ri­spet­ti­vo progetto deve sod­di­sfa­re. In alcuni è anche de­ter­mi­nan­te con quali strumenti si desidera operare: i moduli Qt Core e Qt GUI sono vincolati all’im­po­sta­zio­ne pre­de­fi­ni­ta quando si desidera lavorare con qmake. Se si sceglie Qbs o un’altra soluzione come sistema di co­stru­zio­ne, non esiste una simile di­pen­den­za pre­de­fi­ni­ta.

Nella struttura di in­ter­fac­ce utente grafiche Qt offre anche due diverse pos­si­bi­li­tà che in­fluen­za­no la scelta dei moduli centrali: da un lato, con Qt Designer è di­spo­ni­bi­le un editor WYSIWYG stret­ta­men­te collegato ai widget di Qt. Dall’altro, con Qt Quick, è possibile optare per un’al­ter­na­ti­va (inclusi vari moduli di am­plia­men­to) per lo sviluppo con il lin­guag­gio QML.

Qt Add-on

Il marchio “Qt Add-on” viene assegnato a tutti i moduli che portano agli utenti di Qt un vantaggio ulteriore per scopi specifici. Mentre alcuni di questi moduli ag­giun­ti­vi, come quelli centrali, sono pensati per tutte le forme di sviluppo e piat­ta­for­ma di de­sti­na­zio­ne, gran parte di questi com­po­nen­ti sono im­pie­ga­bi­li solo su de­ter­mi­na­te piat­ta­for­me. Così funziona l’add-on Qt Bluetooth, che ga­ran­ti­sce l’accesso all’hardware Bluetooth, ad esempio solo nelle ap­pli­ca­zio­ni Android, iOS, Linux e macOS; i moduli come Qt Windows Extras, Qt Mac Extras o Qt Android Extras operano solo in programmi per le relative piat­ta­for­me di de­sti­na­zio­ne.

Inoltre, tre add-on sono di­spo­ni­bi­li solo dietro licenza com­mer­cia­le o GNU-GPLv3:

  • Qt Charts: com­po­nen­ti UI per la vi­sua­liz­za­zio­ne di diagrammi vi­si­va­men­te ac­cat­ti­van­ti (basati su modelli di dati statici o dinamici)
  • Qt Data Vi­sua­li­za­tion: com­po­nen­ti UI per la vi­sua­liz­za­zio­ne in 3D di dati
  • Qt Virtual Keyboard: framework per l’im­ple­men­ta­zio­ne di diversi metodi di im­mis­sio­ne e tastiere virtuali su base QML (piat­ta­for­me di de­sti­na­zio­ne: Linux, Windows)
N.B.

Dopo Qt 5 esistono moduli sup­ple­men­ta­ri speciali (“Value-Add Modules”), di­spo­ni­bi­li esclu­si­va­men­te im­pie­gan­do la licenza com­mer­cia­le. Tra questi vi sono, ad esempio, il modulo Qt per l’au­to­ma­tiz­za­zio­ne, con­te­nen­te diverse librerie e strumenti per lo sviluppo di sistemi di au­to­ma­tiz­za­zio­ne come KNX (au­to­ma­tiz­za­zio­ne di edifici).

Qt Creator

L’ambiente di sviluppo integrato (IDE) Qt Creator fornisce per l’intero processo di sviluppo numerosi strumenti e mec­ca­ni­smi di au­to­ma­tiz­za­zio­ne. Aiuta un manager d’impianto nella creazione di un nuovo progetto, gui­dan­do­lo passo dopo passo at­tra­ver­so il processo di creazione e af­fian­can­do­lo con tutti i file necessari. Inoltre, IDE accelera la scrittura del codice. Pertanto, l’editor integrato offre fun­zio­na­li­tà tra cui l’evi­den­zia­zio­ne della sintassi, il com­ple­ta­men­to au­to­ma­ti­co del codice o il controllo degli errori.

N.B.

I pacchetti binari per l’in­stal­la­zio­ne di Qt Creator (contenuto nel download di Qt) sono di­spo­ni­bi­li per i sistemi operativi Windows (a partire da 7), Ubuntu Linux (a partire da 16.04) e macOS (a partire da 10.10).

I seguenti strumenti sono ul­te­rior­men­te integrati di default al Code Editor in Qt Creator:

  • qmake: come sistema di com­pi­la­zio­ne standard di Qt, qmake è integrato di­ret­ta­men­te in Qt Creator ed è se­le­zio­na­bi­le nel menu di progetto. Altri sistemi sono ese­gui­bi­li in IDE. Per uti­liz­za­re Qbs, aprire ad esempio un file .qbs.
  • Qt Designer: Qt Designer è il programma nativo per la pro­get­ta­zio­ne e la creazione di in­ter­fac­ce utente grafiche con l’aiuto dei widget diQt. L’editor visuale consente di or­ga­niz­za­re e per­so­na­liz­za­re i widget.
  • Qt Linguist: le ap­pli­ca­zio­ni possono essere lo­ca­liz­za­te lin­gui­sti­ca­men­te di­ret­ta­men­te in Qt Creator. Svi­lup­pa­to­ri, tra­dut­to­ri e re­spon­sa­bi­li del rilascio trovano gli strumenti adeguati a tale scopo.
  • Qt Assistant: Con Qt Assistant, Qt Creator fornisce un rapido accesso alla do­cu­men­ta­zio­ne ufficiale del framework. È di­spo­ni­bi­le una funzione au­si­lia­ria.

Come funziona lo sviluppo del software con segnali e slot in Qt

Grazie ai col­le­ga­men­ti a Python, Ruby, Go, ecc., Qt supporta so­stan­zial­men­te vari linguaggi. Il lin­guag­gio di pro­gram­ma­zio­ne nativo del framework rimane in ogni caso C++ e l’am­plia­men­to di questo lin­guag­gio orientato agli oggetti at­tra­ver­so il pre­pro­ces­so­re MOC ga­ran­ti­sce nuovi aspetti e paradigmi, come i segnali e gli slot già men­zio­na­ti. Il concetto consente una co­mu­ni­ca­zio­ne guidata dagli eventi tra i com­po­nen­ti di programma uti­liz­za­ti e rap­pre­sen­ta un’al­ter­na­ti­va fles­si­bi­le alle funzioni di richiamo dirette (callback). Consente, ad esempio, il col­le­ga­men­to di oggetti o moduli, senza che debbano ne­ces­sa­ria­men­te co­no­scer­si.

N.B.

Qt è l’autore del concetto dello slot di segnale e lo ha plasmato in modo decisivo nel corso degli anni. Nel frattempo, anche tante altre librerie di programma e framework, come Flow, attingono a questo modello di col­le­ga­men­to.

Con­cre­ta­men­te, il segnale è un messaggio inviato da un oggetto al ve­ri­fi­car­si di un de­ter­mi­na­to evento. Uno slot è una funzione abituale as­so­cia­bi­le ad un segnale ed ese­gui­bi­le ogni qualvolta si riceve detto segnale. È possibile associare un segnale a più slot per ri­chia­ma­re varie funzioni come risultato di un unico evento. Inoltre, il concetto di pro­gram­ma­zio­ne ammette il col­le­ga­men­to di più segnali con un unico slot. In tal caso, viene ri­chia­ma­ta una stessa funzione al ve­ri­fi­car­si di diversi eventi.

Segnali e slot aiutano a portare sull’in­ter­fac­cia utente una fun­zio­na­li­tà orientata all’evento dell’ap­pli­ca­zio­ne svi­lup­pa­ta. In Qt, tuttavia, i col­le­ga­men­ti segnale-slot non vanno inseriti fa­ti­co­sa­men­te e sin­go­lar­men­te a mano: molte classi incluse del framework offrono accesso a vari segnali e slot pre­de­fi­ni­ti. In caso di necessità, possono essere create anche con­nes­sio­ni proprie agli oggetti.

Cosa può fare il lin­guag­gio di markup QML di Qt?

A partire dalla versione 4.7, Qt presenta un proprio lin­guag­gio di markup QML. Questo si con­trad­di­stin­gue per la sua sintassi simile a JSON e per il supporto di espres­sio­ni im­pe­ra­ti­ve di Ja­va­Script. Al centro si trova tuttavia la de­scri­zio­ne di­chia­ra­ti­va degli elementi GUI, che ga­ran­ti­sce un codice di programma chiaro. QML combina anche approcci di­chia­ra­ti­vi e im­pe­ra­ti­vi in un unico lin­guag­gio di pro­gram­ma­zio­ne, che consente un ampio margine di manovra allo svi­lup­pa­to­re. Optando per il modulo Qt Quick, con Qt Quick Compiler si ha lo strumento adeguato per la com­pi­la­zio­ne del codice QML in C++ nativo. Inoltre, è possibile impiegare l’omonimo designer (Qt Quick Designer) in Qt Creator per lavorare con com­po­nen­ti QML già pronti.

QML rivela i propri punti di forza spe­cial­men­te nello sviluppo di GUI: per via della sintassi sem­pli­fi­ca­ta e del supporto di Ja­va­Script, i designer offrono un migliore accesso rispetto a C++. È così possibile, ad esempio, creare fa­cil­men­te in­ter­fac­ce utente JSON esportate da Photoshop, ve­lo­ciz­zan­do no­te­vol­men­te il processo di sviluppo. Anche se è teo­ri­ca­men­te possibile scrivere l’intero programma in QML, il lin­guag­gio di markup viene impiegato di rado nella pro­gram­ma­zio­ne della logica dell’ap­pli­ca­zio­ne.

N.B.

QML ha reso la creazione dell’in­ter­fac­cia utente tramite widget ri­don­dan­te in molti modi. In par­ti­co­la­re il lin­guag­gio di markup mostra i propri punti di forza nelle ani­ma­zio­ni, così come nei layout specifici per l’utente e nei com­po­nen­ti di controllo (mobile, tou­ch­screen, ecc.). Quando si tratta di elementi di comando tra­di­zio­na­li per desktop, come barre di na­vi­ga­zio­ne, barre degli strumenti o com­po­nen­ti drag and drop, i widget offrono un migliore supporto e sono pertanto tuttora am­pia­men­te diffusi negli ambienti desktop classici.

Su quali piat­ta­for­me viene eseguito Qt?

Qt è sup­por­ta­to da diverse piat­ta­for­me da 32 e 64 bit. Per l’uso del framework, non è so­li­ta­men­te ne­ces­sa­rio più di GCC o un altro com­pi­la­to­re. Per l’uso di Qt Quick, si impiegano anche Open GL, DirectX o un renderer al­ter­na­ti­vo. Per la versione Qt attuale, il team di svi­lup­pa­to­ri elenca le seguenti piat­ta­for­me di supporto ufficiali:

Piat­ta­for­ma Versione Com­pi­la­to­re
Windows 10, 8.1, 7, UWP (Universal Windows Platform) MSVC 2017, MSVC 2015, MinGW 5.3
Linux/X11 openSUSE 42.2, Red Hat En­ter­pri­se Linux 6.6 e 7.2, Ubuntu 16.04 GCC (a partire da 4.8), ICC
Android a partire da 4.1 GCC, MinGW 5.3
macOS ecc. macOS (a partire da 10.11), iOS 10 e 11, tvOS 10 e 11, watchOS 3 e 4 Clang (Apple)
Sistemi in­cor­po­ra­ti Embedded Linux, Embedded Linux (Boot2Qt), QNX 6.6.0 e 7.0, INTEGRITY 11.4.4 GCC

Dove viene impiegato Qt?

Pro­ba­bil­men­te il più grande progetto software co­no­sciu­to che impieghi il framework Qt èKDE Plasma (pre­ce­den­te­men­te KDE Plasma Work­spa­ces). Si tratta di una serie di ambienti desktop o, dalla versione 5 in poi, di un unico ambiente fles­si­bi­le della community open source KDE per diversi ap­pa­rec­chi (desktop, notebook, netbook, tablet, smart­pho­ne). Layout ed elementi di controllo sono per­fet­ta­men­te adeguati ai requisiti dei ri­spet­ti­vi di­spo­si­ti­vi nelle varie varianti Desktop grazie a Qt.

Altri im­por­tan­ti esempi di software sulla base di Qt mostrano la ver­sa­ti­li­tà del framework:

Mul­ti­me­dia:

  • il programma di ela­bo­ra­zio­ne delle immagini Adobe Photoshop Elements
  • il programma di gestione delle immagini Adobe Photoshop Album
  • il lettore mul­ti­me­dia­le gratuito VLC Media Player
  • l’app Linux del servizio di musica in streaming Spotify

Co­mu­ni­ca­zio­ne:

  • l’edizione Linux dello strumento di co­mu­ni­ca­zio­ne Skype
  • il servizio di mes­sag­gi­sti­ca istan­ta­neo Telegram
  • il software per con­fe­ren­ze vocali TeamSpeak

Con­di­vi­sio­ne di file:

  • il P2P-Client Marabunta
  • il download manager di KDE KGet
  • la tra­smis­sio­ne del client Bit­Tor­rent

Strumenti di grafica in 3D:

  • il software di mo­del­la­zio­ne in 3D Adobe Muse CC
  • il software di vir­tua­liz­za­zio­ne in 3D Autodesk Maya
  • il software CAD AutoQ3D

Giochi:

  • Monkey Island
  • Dust Racing 2D

Altro:

  • il programma di layout Scribus
  • il software di ma­te­ma­ti­ca Ma­the­ma­ti­ca
  • il software di notazione e com­po­si­zio­ne Sibelius

In sintesi: framework fles­si­bi­le per progetti mul­ti­piat­ta­for­ma versatili

Qt è un veterano del framework che si è co­stan­te­men­te adeguato alle esigenze delle GUI moderne. Non è un caso che oltre vent’anni dopo il rilascio della prima versione, la suite di strumenti scritta in C++ sia diventata una delle soluzioni più diffuse per lo sviluppo di in­ter­fac­ce grafiche utente in­di­pen­den­ti dalla piat­ta­for­ma. In par­ti­co­la­re, strumenti come Qt Creator o le versioni più recenti del lin­guag­gio di markup QML non solo ot­ti­miz­za­no il processo di lavoro in generale ma sem­pli­fi­ca­no anche la col­la­bo­ra­zio­ne tra designer e pro­gram­ma­to­ri.

Vai al menu prin­ci­pa­le