Qt: il framework C++ per lo sviluppo di software multipiattaforma

Chi si occupa dello sviluppo di applicazioni conosce le difficoltà legate alla creazione e alla strutturazione dei singoli componenti. Librerie e framework con componenti impiegabili svolgono un ruolo importante. Questi non solo favoriscono la standardizzazione del processo di sviluppo, ma lo semplificano anche. Il framework tra piattaforme Qt, ad esempio, consente un enorme risparmio di lavoro nello sviluppo di interfacce utente grafiche e di interi programmi, focalizzandosi sulla collaborazione ottimale tra designer e sviluppatori. A tale scopo componenti come l’ambiente di sviluppo integrato Qt Creator richiedono un proprio linguaggio di markup e vari moduli liberamente selezionabili.

Cos’è Qt?

Non essendo soddisfatti degli strumenti per lo sviluppo del software multipiattaforma, nel 1990 i due norvegesi Haavard Nord e Eirik Chambe-Eng iniziarono a lavorare allo sviluppo di Qt. Due anni dopo fondarono l’impresa Trolltech, che fu poi acquisita dal gruppo di telecomunicazioni Nokia e nel 2012 dall’azienda di software finlandese Digia. Dal 2014 è l’impresa controllata da Digia, The Qt Company, ad occuparsi dello sviluppo.

Nel corso degli anni, Qt si è sviluppata 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 proprietaria e le licenze open source GPL e LGPL, rende possibile sia l’uso collettivo che quello commerciale.

Qt è programmata in C++ e il linguaggio di programmazione viene ampliato mediante il preprocessore MOC (Meta-Object Compiler) con caratteristiche come il meccanismo di segnali e slot (consente la comunicazione legata agli eventi tra oggetti di programma). Pertanto, il preprocessore genera il C++ standard ancora prima della compilazione dal codice sorgente Qt. Di conseguenza, le applicazioni Qt con compilatori C++ comuni come GCC, ICC, MinGW o MSVC possono essere tradotti. Le più moderne versioni del framework offrono l’accesso al linguaggio di markup di Qt, QML, che consente delle semplificazioni in particolare nello sviluppo di GUI. Oltre a queste soluzioni linguistiche interne, sono presenti vari collegamenti messi a disposizione da terzi per altri linguaggi di programmazione come Python, Ruby, Go, Java o PHP.

Con qmake (soluzione standard) e Qbs (Qt Build Suite), il framework dispone di due sistemi di costruzione propri, consentendo anche l’impiego di altri sistemi come CMake. Inoltre, gli utenti possono utilizzare il proprio ambiente di sviluppo integrato Qt Creator, che dispone di un editor codice e consente un accesso rapido ai componenti selezionati.

Sintesi dei componenti Qt più importanti

Con il tempo, il framework Qt è diventato sempre più ampio. Così non si lavora solo intensamente alla qualità dell’ambiente di sviluppo Qt Creator integrato e al supporto linguistico e della piattaforma, ma anche per mettere a disposizione di programmatori e designer un’ampia gamma di funzioni. Il team Qt dà da sempre valore alla copertura di scenari applicativi specifici del settore desktop e mobile.

Dato che solo pochissime applicazioni basate su Qt contano su una gamma di funzioni completa, il framework è suddiviso in moduli a partire dalla versione 4. Questi possono essere selezionati e assemblati, garantendo una flessibilità elevata sia al team Qt che agli utenti. Con la versione 5, il team Qt ha introdotto un’ulteriore suddivisione di moduli in modulo base (Qt Essentials) e modulo supplementare per scopi d’impiego speciali (Qt Add on).

Qt Essentials

I Qt Essentials costituiscono la base di Qt tra piattaforme. Sono disponibili su tutte le piattaforme di sviluppo supportate e su quelle di destinazione testate e sono rilevanti o utili per gran parte delle applicazioni sviluppate. I seguenti moduli fanno parte dei componenti essenziali del framework:

modulo descrizione
Qt Core Classi principali non grafiche, necessarie per tutti gli altri moduli
Qt GUI Classi base per la progettazione di interfacce utente grafiche, incluso OpenGL
Qt Multimedia Impostazione di tipi QML e classi C++ per la trasformazione di contenuti multimediali (audio/video); API per l’accesso alla funzionalità camera e radio
Qt Multimedia Widgets Classi basate su widget per l’implementazione di funzionalità multimediali
Qt Network API per applicazioni con accesso ai network TCP/IP
Qt QML Framework e tipi di linguaggio di markup QML di Qt
Qt Quick Framework dichiarativo per lo sviluppo di applicazioni altamente dinamiche con interfacce di comando QML su misura
Qt Quick Controls 2 Ampliamento Qt-Quick: tipi di QML leggeri, molto efficienti che semplificano la creazione di interfacce
Qt Quick Dialogs Ampliamento Qt-Quick: Tipi per la creazione e l’interazione con dialoghi di sistema
Qt Quick Layouts Ampliamento Qt-Quick: Tipi di QML per la disposizione di oggetti nell’interfaccia sviluppata
Qt Quick Test Framework di prova per applicazioni QML; i test sono descritti come funzioni JavaScript
Qt SQL Classi per l’integrazione di banche dati SQL
Qt Test Classi per test dettagliati di applicazioni e librerie Qt
Qt Widgets Impostazione di elementi UI per la creazione di interfacce utente classiche, basate su widget con designer Qt

I moduli impiegati cambiano, come menzionato, da applicazione ad applicazione. Sono decisivi innanzitutto i requisiti che il rispettivo progetto deve soddisfare. In alcuni è anche determinante con quali strumenti si desidera operare: i moduli Qt Core e Qt GUI sono vincolati all’impostazione predefinita quando si desidera lavorare con qmake. Se si sceglie Qbs o un’altra soluzione come sistema di costruzione, non esiste una simile dipendenza predefinita.

Nella struttura di interfacce utente grafiche Qt offre anche due diverse possibilità che influenzano la scelta dei moduli centrali: da un lato, con Qt Designer è disponibile un editor WYSIWYG strettamente collegato ai widget di Qt. Dall’altro, con Qt Quick, è possibile optare per un’alternativa (inclusi vari moduli di ampliamento) per lo sviluppo con il linguaggio 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 aggiuntivi, come quelli centrali, sono pensati per tutte le forme di sviluppo e piattaforma di destinazione, gran parte di questi componenti sono impiegabili solo su determinate piattaforme. Così funziona l’add-on Qt Bluetooth, che garantisce l’accesso all’hardware Bluetooth, ad esempio solo nelle applicazioni 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 piattaforme di destinazione.

Inoltre, tre add-on sono disponibili solo dietro licenza commerciale o GNU-GPLv3:

  • Qt Charts: componenti UI per la visualizzazione di diagrammi visivamente accattivanti (basati su modelli di dati statici o dinamici)
  • Qt Data Visualization: componenti UI per la visualizzazione in 3D di dati
  • Qt Virtual Keyboard: framework per l’implementazione di diversi metodi di immissione e tastiere virtuali su base QML (piattaforme di destinazione: Linux, Windows)
N.B.

Dopo Qt 5 esistono moduli supplementari speciali (“Value-Add Modules”), disponibili esclusivamente impiegando la licenza commerciale. Tra questi vi sono, ad esempio, il modulo Qt per l’automatizzazione, contenente diverse librerie e strumenti per lo sviluppo di sistemi di automatizzazione come KNX (automatizzazione di edifici).

Qt Creator

L’ambiente di sviluppo integrato (IDE) Qt Creator fornisce per l’intero processo di sviluppo numerosi strumenti e meccanismi di automatizzazione. Aiuta un manager d’impianto nella creazione di un nuovo progetto, guidandolo passo dopo passo attraverso il processo di creazione e affiancandolo con tutti i file necessari. Inoltre, IDE accelera la scrittura del codice. Pertanto, l’editor integrato offre funzionalità tra cui l’evidenziazione della sintassi, il completamento automatico del codice o il controllo degli errori.

N.B.

I pacchetti binari per l’installazione di Qt Creator (contenuto nel download di Qt) sono disponibili 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 ulteriormente integrati di default al Code Editor in Qt Creator:

  • qmake: come sistema di compilazione standard di Qt, qmake è integrato direttamente in Qt Creator ed è selezionabile nel menu di progetto. Altri sistemi sono eseguibili in IDE. Per utilizzare Qbs, aprire ad esempio un file .qbs.
  • Qt Designer: Qt Designer è il programma nativo per la progettazione e la creazione di interfacce utente grafiche con l’aiuto dei widget diQt. L’editor visuale consente di organizzare e personalizzare i widget.
  • Qt Linguist: le applicazioni possono essere localizzate linguisticamente direttamente in Qt Creator. Sviluppatori, traduttori e responsabili del rilascio trovano gli strumenti adeguati a tale scopo.
  • Qt Assistant: Con Qt Assistant, Qt Creator fornisce un rapido accesso alla documentazione ufficiale del framework. È disponibile una funzione ausiliaria.

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

Grazie ai collegamenti a Python, Ruby, Go, ecc., Qt supporta sostanzialmente vari linguaggi. Il linguaggio di programmazione nativo del framework rimane in ogni caso C++ e l’ampliamento di questo linguaggio orientato agli oggetti attraverso il preprocessore MOC garantisce nuovi aspetti e paradigmi, come i segnali e gli slot già menzionati. Il concetto consente una comunicazione guidata dagli eventi tra i componenti di programma utilizzati e rappresenta un’alternativa flessibile alle funzioni di richiamo dirette (callback). Consente, ad esempio, il collegamento di oggetti o moduli, senza che debbano necessariamente conoscersi.

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 collegamento.

Concretamente, il segnale è un messaggio inviato da un oggetto al verificarsi di un determinato evento. Uno slot è una funzione abituale associabile ad un segnale ed eseguibile ogni qualvolta si riceve detto segnale. È possibile associare un segnale a più slot per richiamare varie funzioni come risultato di un unico evento. Inoltre, il concetto di programmazione ammette il collegamento di più segnali con un unico slot. In tal caso, viene richiamata una stessa funzione al verificarsi di diversi eventi.

Segnali e slot aiutano a portare sull’interfaccia utente una funzionalità orientata all’evento dell’applicazione sviluppata. In Qt, tuttavia, i collegamenti segnale-slot non vanno inseriti faticosamente e singolarmente a mano: molte classi incluse del framework offrono accesso a vari segnali e slot predefiniti. In caso di necessità, possono essere create anche connessioni proprie agli oggetti.

Cosa può fare il linguaggio di markup QML di Qt?

A partire dalla versione 4.7, Qt presenta un proprio linguaggio di markup QML. Questo si contraddistingue per la sua sintassi simile a JSON e per il supporto di espressioni imperative di JavaScript. Al centro si trova tuttavia la descrizione dichiarativa degli elementi GUI, che garantisce un codice di programma chiaro. QML combina anche approcci dichiarativi e imperativi in un unico linguaggio di programmazione, che consente un ampio margine di manovra allo sviluppatore. Optando per il modulo Qt Quick, con Qt Quick Compiler si ha lo strumento adeguato per la compilazione del codice QML in C++ nativo. Inoltre, è possibile impiegare l’omonimo designer (Qt Quick Designer) in Qt Creator per lavorare con componenti QML già pronti.

QML rivela i propri punti di forza specialmente nello sviluppo di GUI: per via della sintassi semplificata e del supporto di JavaScript, i designer offrono un migliore accesso rispetto a C++. È così possibile, ad esempio, creare facilmente interfacce utente JSON esportate da Photoshop, velocizzando notevolmente il processo di sviluppo. Anche se è teoricamente possibile scrivere l’intero programma in QML, il linguaggio di markup viene impiegato di rado nella programmazione della logica dell’applicazione.

N.B.

QML ha reso la creazione dell’interfaccia utente tramite widget ridondante in molti modi. In particolare il linguaggio di markup mostra i propri punti di forza nelle animazioni, così come nei layout specifici per l’utente e nei componenti di controllo (mobile, touchscreen, ecc.). Quando si tratta di elementi di comando tradizionali per desktop, come barre di navigazione, barre degli strumenti o componenti drag and drop, i widget offrono un migliore supporto e sono pertanto tuttora ampiamente diffusi negli ambienti desktop classici.

Su quali piattaforme viene eseguito Qt?

Qt è supportato da diverse piattaforme da 32 e 64 bit. Per l’uso del framework, non è solitamente necessario più di GCC o un altro compilatore. Per l’uso di Qt Quick, si impiegano anche Open GL, DirectX o un renderer alternativo. Per la versione Qt attuale, il team di sviluppatori elenca le seguenti piattaforme di supporto ufficiali:

Piattaforma Versione Compilatore
Windows 10, 8.1, 7, UWP (Universal Windows Platform) MSVC 2017, MSVC 2015, MinGW 5.3
Linux/X11 openSUSE 42.2, Red Hat Enterprise 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 incorporati Embedded Linux, Embedded Linux (Boot2Qt), QNX 6.6.0 e 7.0, INTEGRITY 11.4.4 GCC

Dove viene impiegato Qt?

Probabilmente il più grande progetto software conosciuto che impieghi il framework Qt èKDE Plasma (precedentemente KDE Plasma Workspaces). Si tratta di una serie di ambienti desktop o, dalla versione 5 in poi, di un unico ambiente flessibile della community open source KDE per diversi apparecchi (desktop, notebook, netbook, tablet, smartphone). Layout ed elementi di controllo sono perfettamente adeguati ai requisiti dei rispettivi dispositivi nelle varie varianti Desktop grazie a Qt.

Altri importanti esempi di software sulla base di Qt mostrano la versatilità del framework:

Multimedia:

  • il programma di elaborazione delle immagini Adobe Photoshop Elements
  • il programma di gestione delle immagini Adobe Photoshop Album
  • il lettore multimediale gratuito VLC Media Player
  • l’app Linux del servizio di musica in streaming Spotify

Comunicazione:

  • l’edizione Linux dello strumento di comunicazione Skype
  • il servizio di messaggistica istantaneo Telegram
  • il software per conferenze vocali TeamSpeak

Condivisione di file:

  • il P2P-Client Marabunta
  • il download manager di KDE KGet
  • la trasmissione del client BitTorrent

Strumenti di grafica in 3D:

  • il software di modellazione in 3D Adobe Muse CC
  • il software di virtualizzazione in 3D Autodesk Maya
  • il software CAD AutoQ3D

Giochi:

  • Monkey Island
  • Dust Racing 2D

Altro:

  • il programma di layout Scribus
  • il software di matematica Mathematica
  • il software di notazione e composizione Sibelius

In sintesi: framework flessibile per progetti multipiattaforma versatili

Qt è un veterano del framework che si è costantemente 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 interfacce grafiche utente indipendenti dalla piattaforma. In particolare, strumenti come Qt Creator o le versioni più recenti del linguaggio di markup QML non solo ottimizzano il processo di lavoro in generale ma semplificano anche la collaborazione tra designer e programmatori.

Hai trovato questo articolo utile?
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.
Page top