Questo framework richiede ovviamente almeno una discreta conoscenza del C++ e dei suoi concetti principali, come l'eredità che avremmo modo di vedere utilizzata molto spesso.
Questo articolo vuole essere solo di introduzione al framework Qt e di spiegazione per l'installazione, mentre nei prossimi verranno spiegati tutti i passi principali per progettare una semplice applicazione
simile a quella mostrata in video. Cercherò di spiegare passo passo, per quelle che sono le mie conoscenze, i concetti principali e i passaggi di codice più significativi, lasciando a voi la libertà di sbizzarrirvi una volta presa la mano. Il framework Qt è molto grande e anche il sottoscritto ogni volta impara cose nuove, quindi non esitate a commentare e a rilevare qualche mia imprecisione.
Qt non è una semplice libreria, cioè un sistema modulare di classi/funzioni, ma è un vero e proprio toolkit fornito di molti strumenti come l'ambiente di sviluppo integrato (IDE) QtCreator, un software progettato per facilitare lo sviluppo di applicazioni C++ che sfruttano Qt. QtCreator fornisce un ottimo editor di codice C++, un debugger grafico e un essenziale strumento grafico "QtDesigner" che permette di sistemare la grafica della vostra applicazione semplicemente con il mouse (sempre che non vogliate perdere la testa scrivendo tonnellate di codice ripetitivo). Qui sotto potete dare un'occhiata all'interfaccia di QtCreator
INSTALLAZIONE
Per l'installazione, portatevi nella sezione download del sito ufficiale della libreria http://qt-project.org/downloads e scegliete il pacchetto di installazione (SDK) per il vostro sistema operativo. La versione del SDK che io ho scaricato è la 1.2.1, che include la libreria Qt versione 4.8 (Tra un mese circa uscirà la versione 5). Nell'articolo faccio riferemento a Linux 32bit, anche se lo procedura per Windows e Mac non dovrebbe essere molto dissimile Dovete scegliere inoltre anche tra l'installazione online e offline. Consiglio vivamente la soluzione offline per motivi di tempo, a meno che non possediate una connessione molto veloce.Una volta scaricato il pacchetto di installazione sequite questi semplici passi:
1) Aprite la shell (CTRL+ALT+T) e accedete alla cartella di download dove troverete il file scaricato di estensione .run
2)Rendete il file eseguibile con il comando shell:
sudo chmod +x nome-file.run
3)Eseguite lo script:
./nome-file.run
4)Seguite la procedura guidata d'installazione, scegliendo le cartelle in cui installare il framework
Terminata l'installazione (ci vuole un pò di pazienza), vi troverete nel percorso da voi specificato la cartella QtSdk, dove si trovano le librerie,la documentazione,QtCreator e tutti gli altri strumenti. Quindi lanciamo dal menu di avvio QtCreator e realizziamo un piccolo progetto di prova per verificare che tutto funzioni
PROGETTO D'ESEMPIO
Aprite QtCreator e dalla schermata di benvenuto cliccate su "Open Project" e poi selezionate "Qt Widget Project > Qt Gui Application". Quindi scegliete il nome da dare al vostro progetto e la directory in cui salvarlo. Arrivati alla schermata "Class Information", dopo aver lasciato il segno di spunta sul
checkbox "Generate Form" (su cui torneremo dopo), vi troverete a scegliere la classe base della vostra applicazione:
- QMainWindow
- QWidget
- QDialog
Parliamo brevemente delle loro principali caratteristiche:
Tutte e tre le classi derivano dalla classe QObject, che viene ereditata indirettamente da molte classi della libreria Qt.
Ogni oggetto istanza di QObject può avere un solo oggetto Qobject padre e un numero arbitrario di oggetti QObject figli. Un oggetto QObject gestisce tutti i suoi figli QObject in maniera tale che quando il primo viene distrutto dall'utente, invoca i distruttori dei suoi figli, i quali a loro volta invocano i distruttori dei figli e così via. Questa strategia è utile per limitare i fenomeni di memory leak, ovvero di memoria non deallocata.
Altra caratteristica fondamentale è la loro comunicazione con altri QObject utilizzando i signals and slots, un'implementazione del design pattern observer (EN).
Torniamo a QWidget, QDialog e QMainWindow
QWidget è la classe base di tutti gli oggetti che compongono l'interfaccia grafica della vostra applicazione. Ogni oggetto istanza di QWidget viene chiamato widget ed ogni widget che non ha genitori viene chiamata finestra(window).
QDialog è la classe delle finestre di dialogo, come quella che vi ha accompagnato nella creazione del progetto.
QMainWindow è la classe per finestre più accessoriate, dato che ha per default posti predefiniti per le barre di menù e di stato.
Qui accanto abbiamo il diagramma UML che evidenzia la parentela tra QWidget, QDialog, QMainWindow e QObject (ritagliato da quello completo per le Qt 4.3). Si nota la presenza della classe QPaintDevice, che è la classe di tutti gli oggetti che possono essere mostrati a video.
Nel nostro progetto, selezioniamo QMainWindow perchè è la classe più accessoriata. Completata la procedura,vi ritroverete un progetto con due codici sorgente main.cpp e mainwindow.cpp. Nella cartella Forms del progetto è presente il file mainwindow.ui che rapprensenta in formato XML "il widget tree" della vostra finestra principale, ovvero l'insieme di tutti i widgets di cui è composta la finestra. Cliccateci e vi apparirà la scheda Design, come mostrato in figura
E' possibile a mano collocare tutti i widgets dentro la finestra a vostro piacimento. Nella figura viene fatto un semplice cambio di titolo della finestra.
Se cliccate poi su Edit dal menu verticale a sinistra, ritornate alla schermata precedente e potete compilare il progetto (Build->Build Project) ed eseguirlo (Build->Run). Dovrebbe apparirvi la vostra tanto agognata finestra.
Questo è quanto, nei successivi articoli smanetteremo un pò con il codice.