Qt by Examples LINUX DAY 2016 http://www.lugman.org https://www.qt.io/
Qt by Examples Argomenti QT: Qualche Caratteristica... Installazione QT Designer Creazione nuova applicazione C++ Aggiunta di un widget grafico e collegamento dei segnali Aggiunta di un oggetto non grafico come Timer, Server TCP, ecc Edit di un widget già esistente per funzioni come: Intercettare una KEY o una combinazione di tasti Drag&Drop nel programma e/o nel sistema operativo Creazione di un widget personalizzato Test del port del codice portato sotto Windows Link delle librerie in Linux e in Windows Esempio di un programma
QT: Qualche Caratteristica... Qt by Examples QT: Qualche Caratteristica... Programmazione C++ Compilatore GCC a 32 o 64 bit sotto Linux Cygwin a 32 bit o VC++ sotto Windows Definibile per ogni progetto Utilizzo di molte macro di preprocessore per estenderne le funzioni Sistema SIGNAL→SLOT per la gestione degli eventi (http://doc.qt.io/qt-5.9/signalsandslots.html) Signal/Slot vs Callbacks, Versatilià vs Velocità Single signal → Multiple Slots Elaborazione immediata e interruttiva oppure accodabile degli Slots Notifica di chi ha emesso il segnale (ovvero ciò che da versatilità, ma che rallenta) IDE Grafico integrato: QT Designer Widget & Object già pronti e possibilità di crearne di nuovi
Applicazione per PC: QT Widget Application Qt by Examples Applicazione per PC: QT Widget Application Nuovo → Qt Widget Application: Scegliere la directory e il nome dell'applicazione Scegliere compilatore e profilo (Debug o Release) Aggiungere i widget: Tree Widget → aggiunta degli item in modo fisso Text Edit: per uso successivo e come debug Push Button con il quale si ricostruirà il tree → collegare il segnale _on_click() Aggiungere le funzioni: Tree Widget → Drag&Drop di default Push Button per costruire il nuovo tree
Applicazione per PC: QT Widget Application Qt by Examples Applicazione per PC: QT Widget Application Test 1: Mostra come inserire un TreeWidget Creare gli item manualmente: si nota subito la struttura a tabella che è di fatto la stessa di un TableWidget. Ogni item ha una struttura ad array per riempire i vari campi della tabella, mentre ha una struttura a lista per riempire le sotto colonne. Abilitare i Drag&Drop del TreeWidget: il drag funziona solo con se stesso ora! Test 2: Creazione automatica del tree e dei sub-tree QTreeWidgetItem *item = new QtreeWidgetItem() crea l'item che andrà poi configurato QTreeWidgetItem *item = new QtreeWidgetItem(item) crea un'altro item che è però un sotto-item del precedente. QfileDialog::getExistingDirectory() permette di scegliere la directory richiamando il form dal sistema operativo
reimplementando la classe TreeWidget Qt by Examples Drag&Drop Il Drag&Drop viene abilitato su quasi tutti i Widget tramite l'interfaccia grafica. Le opzioni sono: dragEnable, dragDropOverwriteMode e dragDropMode. Viene poi definita l'azione di default a fronte di un drop (defaultDropAction) Per il TreeWidget, il D&D funziona solo su se stesso, mentre per l'editText è già abilitato e funziona anche tra programmi differenti Ma se si vuole che il D&D del TreeWidget porti con se informazioni “leggibili” anche da altre finestre o programmi, come fare per estendere queste funzionalità? reimplementando la classe TreeWidget
Reimplentare TreeWeedget per Drag&Drop Qt by Examples Reimplentare TreeWeedget per Drag&Drop http://doc.qt.io/qt-5.9/dnd.html Creare un nuovo file C++ e un file Header con la classe myTreeWidget: per farlo si può inserire una classe che direttamente compilerà il templete con tutte le classi da ereditare Definire nel file header le funzioni di Drag&Drop da reimplementare che sono già definite come virtuali. Il QTreeWidget verrà poi “promosso” a myTreeWidget
Reimplentare TreeWeedget per Drag&Drop Qt by Examples Reimplentare TreeWeedget per Drag&Drop http://doc.qt.io/qt-5.9/dnd.html È sufficiente reimplementare solo mousePressEvent per mantenere la massima prestazione. Come esempio in un caso viene copiato solo il testo, mentre nell'altro viene copiata l'icona
QWidget vs. QGraphicScene Qt by Examples Custom Widget http://doc.qt.io/qt-5/qwidget.html QWidget vs. QGraphicScene QGraphicScene viene normalmente utilizzato quando occorre creare e manipolare molti oggetti 2D. Se occorre gestire pochi e semplici “rettangoli”, QWidget risulta più semplice in quanto di solito basta solo gestire i Paint Event. Nell'esempio vedremo come: Inserire nella UI un widget generico Reimplementare la classe QWidget in particolare: paintEvent(QPaintEvent *) gestisce l'evento di ridisegno keyPressEvent(QKeyEvent *event) gestisce gli eventi da tastiera NOTA: perché gli eventi da tastiera o dal mouse vengano intercettati, occorre settare il widget perché possa accettare il focus. La via più semplice è settarlo via Designer