un framework cross platform, con cui potete scrivere il codice un'unica volta ed effettuare il deploy su vari sistemi desktop ed embedded. • Qt implementa il principio Hollywood (“non chiamarci, ti chiameremo”). • Qt è anche una libreria, mettendo a disposizione un ampio set di componenti già pronti all'uso. 2 / 30
Qt compilano sulle varie piattaforme supportate senza cambiamenti... • … e si comportano (ed appaiono) nello stesso modo su di esse... • … pur rispettando le tradizionali caratteristiche di ogni piattaforma. 3 / 30
scritto in C++ standard, tuttavia fa uso estensivo di un generatore di codice chiamato moc per implementare alcune funzionalità di alto livello non previste dal linguaggio. • E' possibile estendere le applicazioni tramite embedding di linguaggi di scripting (QtScript, PythonQt, ecc..). • Inoltre è possibile scrivere l'intera applicazione in Python utilizzando l'apposito binding – PyQt. 4 / 30
versioni ufficiali, sono presenti numerosi altri porting effettuati/mantenuti dalla comunità. Desktop Windows Linux Mac Os X Linux Embedded Windows Mobile Symbian Windows CE Embedded 5 / 30
due licenze: • Open source (LGPL v. 2.1) permette di sviluppare applicazioni → con linking dinamico alle Qt senza dover rilasciare il codice o pagare costi di licenza. • Commerciale per sviluppatore e con costo dipendente dal → numero di piattaforme “target”, permette di usare in piena libertà Qt ed è comprensivo di supporto. Per saperne di più: • http://qt.digia.com/licensing • http://www.slideshare.net/qtbynokia/qt-licensing-explained 7 / 30
mette a disposizione un gran quantitativo di funzionalità, realizzate attraverso un alto numero di classi che tuttavia mantengono un'ottima semplicità grazie alla struttura “piatta”. Ecco alcune delle funzionalità offerte da Qt: • Internazionalizzazione e supporto unicode • Multi-threading e multi-processing • Introspezione e RTTI • Implicit Sharing • Gestione automatica lifetime oggetti • Meccanismi di comunicazione all'interno dell'applicazione anche fra thread diversi (signal – slot) 8 / 30
funzionalità “chiave” offerte da Qt sono: • Meccanismi di IPC (shared memory, dbus, tcp/ip, ...) • Model/view framework • Contenitori e strutture dati • Supporto alla programmazione concorrente • Sistema di painting • Unit testing 9 / 30
in vari moduli, in modo che sia possibile utilizzare ciò di cui abbiamo bisogno senza doversi “portare tutto dietro”. Core GUI WebKit OpenGL Declarative Networking Scripting Database Xml Unit Testing 10 / 30
un layer di compatibilità sopra le piattaforme supportate, includendo al suo interno il loop degli eventi e numerose classi di utilità. • Per questo motivo è quindi molto indicato per realizzare applicazioni non GUI come demoni o processi di sistema. • QtGui si occupa di effettuare il disegno della GUI delegando al sistema operativo unicamente la gestione delle finestre top-level. 11 / 30
alle applicazioni Qt di interfacciarsi con un vero e proprio motore di rendering per pagine web. • E' quindi possibile realizzare applicazioni “ibride”, composte da una parte in linguaggio nativo e una parte realizzata con tecnologie web. • QtNetwork offre le principali funzionalità di rete integrate con il loop degli eventi (ma possono essere usate anche senza). 12 / 30
GUI: se con QtGui è possibile fare classiche applicazioni desktop Qt Quick nasce dall'esigenza di realizzare GUI fluide e dinamiche. Qt Quick è realizzato “sopra” Qt in modo da sfruttarne i pregi ed ereditarne le funzionalità (accelerazione hardware, internazionalizzazione, ecc..) 13 / 30
insieme di tecnologie: • Il linguaggio dichiarativo, chiamato Qml ed estensione di JavaScript. • Il runtime, che permette l'accesso a funzionalità e strutture dati di Qt/C++. • QtCreator, che integra un editor avanzato di Qml, un designer grafico di UI e un debugger/profiler. Qt Quick velocizza la realizzazione di GUI ed è quindi molto indicato per il fast prototyping di applicazioni. 14 / 30
dispositivi dotati di framebuffer, Qt offre un vero e proprio gestore di finestre (chiamato QWS – Qt Windows System). • In questo caso Qt scrive direttamente su framebuffer, con un meccanismo di double buffering. • Le applicazioni che utilizzano funzionalità specifiche dell'embedded possono comunque girare su desktop grazie a QVFB, un simulatore di framebuffer integrato in Qt. 16 / 30
di sviluppo completo, ed include: • QtCreator IDE, un potente ma leggero IDE per lo sviluppo e design delle applicazioni; • le librerie Qt, comprensive di esempi e demo; • la documentazione di Qt e dei suoi tools; • un update manager, per essere sempre aggiornati con le ultime versioni di Qt. Separatamente dal QtSDK viene fornito anche il Qt Linguist, strumento per traduttori che desiderano localizzare l'applicazione. 17 / 30
Creator include: • un editor avanzato C++/Qml con autocompletamento e tools di refactoring • gestione di progetti e del sistema di build • QtDesigner per GUI tradizionali e Qml • un sistema di help integrato ed espandibile • un debugger visuale ed integrato con le strutture dati di Qt • supporto per i principali sistemi di controllo di revisione 18 / 30
partire dal 2011, come progetto open source denominato Qt Project e che include privati e aziende. In precedenza Qt, benchè distribuito anche con licenza open source, era sviluppato unicamente dai proprietari di Qt. Questo cambiamento ha incrementato fortemente il numero di contributori a Qt, che quindi potrà beneficiarne diventando sempre più sviluppato, testato e mantenuto. 19 / 30
di mettere Qt Quick al centro dell' ecosistema Qt, riscrivendo parte dello stack grafico per ottimizzarne le prestazioni sfruttando appieno l'accelerazione hardware.
della nuova versione di Qt sono: • maggiore modularità: i vari moduli di Qt4 sono stati ripensati e suddivisi con una granularità maggiore. • Esempio: QtGUI non sarà più dipendenza di Qt Quick • porting più facili su altre piattaforme: adesso il codice di Qt è esso stesso cross platform ed utilizza un layer chiamato QPA per interfacciarsi con il sistema operativo. 22 / 30
obbiettivi nello sviluppo di Qt5 è stato quello di minimizzare i cambiamenti richiesti alle applicazioni. Per questo è stato rimosso o cambiato solo quanto deprecato con Qt4, mantenendo la compatibilità a livello dei sorgenti a circa il 99%. Come conseguenza, alcune applicazioni (es: QtCreator) sono già perfettamente funzionanti sia con Qt4 che con Qt5. 23 / 30
è attualmente in beta, e la data prevista per la release finale è Novembre 2012. Successivamente, alcuni dei più importanti obbiettivi dichiarati dagli sviluppatori di Qt sono: • espandere la libreria dei Widget per desktop. • portare Qt su piattaforme iOS e Android. • portare Qt su BlackBerry OS. 24 / 30
(embedded version) Lo stesso codice può essere compilato ed eseguito su varie piattaforme embedded e desktop. Come conseguenza, gran parte dello sviluppo può essere svolto su Pc, riducendo la parte del testing e debugging da svolgere sull'hardware. In tal modo, sarà possibile scrivere applicazioni più velocemente, senza perdere tempo nel caricare l'applicazione su embedded. 26 / 30
(embedded version) Le classi di Qt, e QtCore in particolare, offrono funzionalità avanzate tipiche di linguaggi di più alto livello, con cui è possibile scrivere applicazioni più velocemente. Es: QString supporto unicode, regexp, split, ecc.. → In aggiunta, la loro implementazione è fatta con un occhio di riguardo all'embedded, combinando: • ottime prestazioni • espansione codice minimale • modularità 27 / 30
(embedded version) La prima versione di Qt risale al 1992: questo ne fa un framework con un'architettura solida e matura. Altre conseguenze sono: • è un framework molto ben testato e funzionante, utilizzato da una larga base di utenti. • dispone di una documentazione davvero ben fatta e di una vasta community. • è corredato di un gran numero di esempi e demo. 28 / 30