Introduzione a Qt Marco Martin.

Slides:



Advertisements
Presentazioni simili
CUDA & OpenMP parallel programming.
Advertisements

Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Costruzione di Interfacce Lezione 18 Qt Tutorial 2
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Costruzione di Interfacce Lezione 20 Qt + Opengl
Costruzione di Interfacce Lezione 16 Qt
Introduzione al linguaggio C++ 5 lezioni
I Thread.
Open Inventor Open Inventor e un object oriented 3D toolkit cioè una libreria di oggetti e metodi per la creazione di applicazioni grafiche interattive.
UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA Facoltà di Ingegneria “Enzo Ferrari” – Sede di Modena Corso di Laurea Specialistica in Ingegneria Informatica.
Open Inventor Open Inventor è un object oriented 3D toolkit, cioè una libreria di oggetti e metodi per la creazione di applicazioni grafiche interattive.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
I Sistemi Operativi. Definizione Per Sistemi Operativi (di seguito SO) si intendono quei pacchetti software, a loro volta costituiti da più sottoprogrammi.
KDE4: tutte le novità Flavio Castelli 25 Ottobre 2008 BgLUG Bergamo Linux User Group.
Giuditta Cantoni, 4 E S.I.A I DATABASE. Definizione databese In informatica, il termine database, banca dati o base di dati (a volte abbreviato con il.
LTSP (Linux Terminal Server Project) GNU/Linux ed Workshop di Enrico Teotti powered with Gentoo Linux Linux Day LUG Mantova.
E’ costituita da due blocchi:  Interfaccia di rete  Blocco di simulazione L’ interfaccia di rete fornisce il collegamento elettrico con la rete sotto.
I moduli 5 Modulo introduttivo: argomentazione del corso e a chi è rivolto Approccio alla programmazione mobile Dispositivi mobile, caratteristiche e funzioni.
VO-Neural Project e GRID Giovanni d’Angelo Dipartimento di Scienze Fisiche Università degli Studi di Napoli Federico II Martina Franca 12 – 23 Novembre.
Concetti Di Base Informatica
Corso di Elementi di Informatica
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
Sviluppo applicativo mobile per lettore barcode datalogic
PNSD - Modulo D1A marzo 2017 Piattaforme di e-­learning e cloud:​ installazione e gestione (azione #22) Prof. Rocca Marcello
IL SOFTWARE (FPwin 6.0).
Università degli Studi di Modena e Reggio Emilia
Lato Server - OMNIS Web Web Services.
PNSD marzo 2017 Piattaforme di e-learning e cloud:​ installazione e gestione (azione #22) Prof. Rocca Marcello
Compilazione del kernel Linux
WPC069 Il deployment automatizzato di Windows 10
Java World Introduzione.
NAV 2013 – Contabilità Industriale (Cost Accounting Module)
960 Grid System CSS Framework e compatibilità cross browser
Introduzione al linguaggio C
Generazione di codice dinamico per la realizzazione di catene di servizi componibili Matteo Fazi – matr
Breve report su corso RedHat Enterprise Virtualization (RH318)
Programmazione per la Musica | Adriano Baratè
PNSD - Modulo D1A 27 aprile 2017 Piattaforme di e-­learning e cloud:​ installazione e gestione (azione #22) Prof. Rocca Marcello
Sistema di Analisi e di Acquisizione
WPC034 - Visual Studio Code: sviluppare su Linux, Mac OS e Windows
Analysis framework of distributed thread and malware data-sources
The Virtual Machine Monitor Introduzione. Installazione. Utilizzo.
Il Binding Nicolò Sordoni.
Paradigma MVC Ing. Buttolo Marco.
Amministrazione dei servizi di stampa
Laboratorio II, modulo LabView.
Unità didattica 1: Introduzione al linguaggio Java
APACHE2-PHP su Raspberry
ai termini e ai principi informatici utili per utilizzare Linux
Tanti motivi per scegliere GNU / Linux
* Il Sistema Operativo GNU/Linux * Sistema Operativo e Applicazioni
Qt by Examples LINUX DAY
analizzatore di protocollo
Il Sistema Operativo.
MODULO 1 – Computer essentials
Corso Java Introduzione.
istalliamo l’ambiente di sviluppo - ide
SOFTWARE Modulo di INFORMATICA DI BASE a cura di T. PRIMERANO.
Concetti introduttivi
Come utilizzare questo modello:
Introduzione a QML e integrazione con il C++
ADO Per gestire i database con tecnologia ASP si utilizzano strumenti ADO (ActiveX Data Objects): un'architettura che fornisce oggetti.
APPUNTI SUL LINGUAGGIO C
OpenLayers Client di mappe “non solo” WMS
Gli archivi e le basi di dati
UNIVERSITÀ DI MODENA E REGGIO EMILIA
Java Introduzione.
Ese 1 (del 31 Marzo 2004).
CLOUD.
Corso di programmazione, Simulazione, ROOT, code, ecc. ecc.
Transcript della presentazione:

Introduzione a Qt Marco Martin

Cos'è Qt Insieme modulare di librerie in C++ Framework per la costruzione di UI Cross platform: Linux, Mac, Windows, Symbian, Android... Cross device: desktop e mobile Iniziato da Trolltech, comprato da Nokia nel 2008 Giunto alla varsione 4.7 (4.8 fine anno, Qt5 fine 2012)

Esempi Opensource KDE (e tutte le sue applicazione come Amarok, Okular, Kontact...) Scribus VLC ... Commerciali Google Earth Skype Autodesk Maya Guitar pro Opera

Perché Qt Facilità di sviluppo, più semplice rispetto ad altre librerie C++ (STL, Boost) Write once, run everywhere LGPL 2/3 Supporto commerciale

Architettura

Setup SDK Linux Pacchettizzato dalla maggior parte delle distribuzioni (LSB) Per lo sviluppo installare pacchetti -devel Windows/MAC http://qt.nokia.com/downloads Installer con librerie/header/documentazione/QtCreator

Moduli QtCore: modulo fondamentale, non ha funzioni grafiche Container (liste,hash,set..) QObject (base dell'object model di Qt) Event loop QtGui: widget, model/view, QgraphicsView... QtNetwork: astrazione di protocolli di rete come HTTP

Moduli (continua) QtSql: accesso database QtScript: binding di oggetti Qt in Javascript QtDeclarative: libreria per costruire UI per dispositivi mobili a partire da un linguaggio declarative (QML) e JavaScript QtXML, QtOpenGl,QtSvg ...

Hello world #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton hello("Hello world!"); hello.resize(100, 30); QObject::connect(&hello, SIGNAL(clicked()), &app, SLOT(quit())); hello.show(); return app.exec(); }

QMake Semplice tool per gestire il build Gestito automaticamente da QtCreator Per progetti piu' complessi puo' essere necessario un tool piu' completo, come Cmake CONFIG += qt HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp qmake hello.pro make

Classi di base Stringhe QString è una classe (più gestibile di char*) Metodi di convenienza come ::length(), ::arg(), ::replace()... Operatori: assegnazione (=) e concatenazione (+) Qurl: url, astrae cose come protocollo, dominio, fragment Container: Qlist, Qhash Qmap classi template Qlist<int> Forniscono iteratori stile STL e Java

Q(Core)Application e event loop I tipi primitivi come QList possono essere utilizzati ovunque Per poter utilizzare tipi QObject bisogna essere dentro ad un event loop Gestito da QCoreApplication (testuale) o QApplication (GUI) Completamente trasparente, gestisce il dispatching di eventi di input e output(paint) oltre all'invocazione degli slot Event loop possono essere annidati Ogni thread ha il proprio event loop

QObject Base dell'object model di Qt Piu' feature rispetto a plain C++ signal e slot Proprietà Eventi Gestione memoria ... Usa il meta object system (codice generato) Non visuale (su Linux QtCore NON dipende da X11)

Object tree Le sottoclassi di QObject sono organizzate secondo una gerarchia padre/figlio QObject(QObject *parent = 0) Il parent aggiunge il nuovo oggetto ai suoi figli Quando un oggetto Qobject viene distrutto (delete o ::deleteLater()) esso distruggera' tutti i suoi figli (se nell'heap) NON è ereditarietà

Eventi virtual void mousePressEvent ( QMouseEvent * event ) Ad un evento, il loop invoca automaticamente il metodo corrispondente dell'oggetto a cui verra' consegnato (quale widget È sotto il mouse?) Metodi di gestione protected virtual, possono essere reimplementati Da fare solo se non c'e' un segnale utile per quello che si vuole fare

Signal e slot Rispondere nella classe B agli eventi che capitano nella classe A Qt fornisce il meccanismo dei Signal e Slot: Classi Qobject possono possedere metodi ti tipo Q_SIGNALS e metodi di tipo Q_SLOTS. Un segnale puo' essere connesso ad uno o piu' slot connect(Object1 *, SIGNAL(foo), Object2 *, SLOT(bar())) Signal e slot devono avere la stessa signature per poter essere connessi (es. valueChanged(int) e manageValue(int)) Emit valueChanged(3) avra' l'effetto di un'invocazione immediata di manageValue(3) (e tutti gli altri eventuali slot collegati)

Signal e Slot #include <QApplication> #include <QFont> #include <QLCDNumber> #include <QPushButton> #include <QSlider> #include <QVBoxLayout> #include <QWidget> class MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0); }; MyWidget::MyWidget(Q Widget *parent) : QWidget(parent) QPushButton *quit = new QPushButton(tr("Quit")); quit- >setFont(QFont("Times" , 18, QFont::Bold)); QLCDNumber *lcd = new QLCDNumber(2); lcd- >setSegmentStyle(QLC DNumber::Filled); QSlider *slider = new QSlider(Qt::Horizontal); slider- >setRange(0, 99); slider->setValue(0); connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); connect(slider, SIGNAL(valueChanged( int)), lcd, SLOT(display(int))); QVBoxLayout *layout = new QVBoxLayout; layout- >addWidget(quit); layout- >addWidget(lcd); layout- >addWidget(slider); setLayout(layout); } int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec();

GUI: QWidget Gli oggetti visualizzati a schermo sono sottoclassi di QWidget È la classe base che riceve gli eventi dall'utente (mouse, keyboard, touch) ed effettua il paint a schermo della grafica Se un qwidget non ha parent (0) È una finestra top level, se il parent e' un altro qwidget, apparira' all'interno di quest'ultimo I widget sono posizionati e ridimensionati dentro ad un altro attraverso dei layout (QboxLayout, QGridLayout)

Qt Designer

Paint Il disegno dei widget avviene nel metodo virtuale reimplementato paintEvent() Un paint deve essere brevissimo per assicurare fluidita' Classe base: QPainter Esegue paint su sottoclassi di QPaintDevice: widget, pixmap, immagini, pdf, svg, stampante

QPainter Funzioni per varie primitive, come linee, ellissi, rettangoli, immagini Es: void Lines::paintEvent(QPaintEvent *event) { QPen pen(Qt::black, 2, Qt::SolidLine); QPainter painter(this); painter.setPen(pen); painter.drawLine(20, 40, 250, 40); pen.setStyle(Qt::DashLine); painter.drawLine(20, 80, 250, 80); painter.setBrush(QBrush("#9e4757")); painter.drawRect(250, 105, 90, 60); ...

QImage vs QPixmap QImage: allocata in memoria, solo software rendering, possibilita' di manipolare singoli pixel, salvare e caricare da disco QPixmap: allocata nella scheda video, hardware rendering, possibile solo eseguire paint, in X11 È gestita direttamente dal server Possibile convertire da immagini a pixmap, costoso (fare solo quando necessario e fuori dal paint event)

QML Linguaggio dichiarativo per costruire interfacce grafiche per dispositivi mobili Parte imperativa in JavaScript (WebCore, prossimamente V8) Opera con qualsiasi Qobject Slegato da QWidget In Qt5 sara' basato su una scena OpenGL (Scene-graph) A lungo termine sostituira' QWidget

Esempio import QtQuick 1.0 Rectangle { width: 200 height: 200 color: "blue" Image { source: "pics/logo.png" anchors.centerIn: parent }

Link Download: http://qt.nokia.com/downloads Training: http://qt.nokia.com/developer/learning/online/traini ng Documentazione API: http://doc.qt.nokia.com/