SlideShare a Scribd company logo
1 of 16
Download to read offline
Sviluppare
App Android
(e iOS)
con Qt Quick
Paolo Sereno
Model-View-Delegate
Di cosa parleremo?
Design Pattern di Qt (e Qt Quick):
Model View Delegate
Chi Sono ?
 …un informatico
 Seguo l’evoluzione del Qt Application Framework dal
lontano 2003
 Nell’ottobre 2009 ho fondato la web community
www.qt-italia.org (chi vuol collaborare… serve aiuto!)
Un po’ di pubblicità…
Ciò che vedrete oggi in queste slide è tratto dall’ultimo
capitolo del mio libro.
QML Quanto Basta: La guida all’uso di Qt Quick in Italiano
A partire dal 30 settembre 2015 sarà disponibile in
formato Kindle su Amazon:
http://www.amazon.it/dp/B012WXGA10
…per la versione cartacea datemi tempo
è un lavoraccio!
Parliamo di Model View Delegate
Nell'implementazione Model-View-Delegate:
 Il modello (Model) comunica con la sorgente dei dati realizzando
un'interfaccia verso gli altri componenti dell'architettura.
 La vista (View) riceve dal modello le informazioni per
rappresentare i dati ed
 Il Delegate provvede infine alla visualizzazione vera e propria e
modifica (editing).
Il Model
Il modello fornisce i dati al delegate attraverso il meccanismo dei data roles. Qt
Quick fornisce diversi modelli dati di base ed implementa meccanismi per
consentire di definire modelli in linguaggio C++ e rappresentarne i dati in QML.
ListModel {
id: colorModel
ListElement {
name: "Rosso"
value: 1
}
ListElement {
name: "Verde"
value: 2
}
ListElement {
name: "Blu"
value: 3
}
}
View
Le View non sono altro che contenitori di elementi, esse possono essere completamente
personalizzate per adattarne lo stile ed il comportamento in funzione dell'applicazione
che si vuol realizzare.
ListView {
anchors.fill: parent
model: colorModel
delegate: nameDelegate
}
Il Delegate
Il delegate, responsabile della visualizzazione dei dati del modello, deve specificare il
role da usare per l'interrogazione del modello. Nell'esempio sotto riportato, il Delegate
è un componente che contiene un solo campo di testo (Text) ed impiega il role name
come contenuto da visualizzare (nello statement text: )
Component {
id: nameDelegate
Text {
text: name;
font.pixelSize: 24
anchors.left: parent.left
anchors.leftMargin: 2
}
}
Una visione d’insieme
// main.qml
import QtQuick 2.5
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
ListModel {
id: colorModel
ListElement {
name: "Rosso"
value: 1
}
ListElement {
name: "Verde"
value: 2
}
ListElement {
name: "Blu"
value: 3
}
}
ListView {
anchors.fill: parent
model: colorModel
delegate: nameDelegate
}
Component {
id: nameDelegate
Text {
text: name;
font.pixelSize: 24
anchors.left: parent.left
anchors.leftMargin: 2
}
}
}
Ma com’è fatto questo coso?
Così!
Con una lista fatta così…
ListModel {
id:myModel
}
Una view fatta così…
ListView {
id:view1
model:myModel
delegate: myDelegate
}
…e il delegate?
…con un delegate così strutturato:
Item {
anchors.fill: parent
Text {
}
Text {
}
Text {
}
Text {
}
Fatemi capire!
Component {
id: myDelegate
Rectangle {
id:itemDel
width: background.width
height: 90
color:"Black"
border.color: "darkGreen"
border.width: 1
Column {
id:col
Item {
anchors.fill: parent
Text {
id:delegateText1;
color:"Orange";
font.pointSize: 10
anchors.left: parent.left;
anchors.leftMargin: 10
text: "<b>Numero Giro</b> "
}
Qui vediamo una porzione del «coso» in questa slide…
Come si appendono dati alla lista?
Mediante i «roles»: che saranno lap e value!
myModel.append({"lap":<numero>,"value":<valore>});
…in questo modo, nella funzione di append, andiamo a dire al modello
quali sono i dati che un generico Item deve contenere... e che valore
hanno.
Come si leggono i dati della lista?
Mediante i soliti «roles»: che saranno lap e value!
Text {
anchors.top:delegateText1.bottom
color:"White"
font.pointSize: 20
anchors.left: parent.left
anchors.leftMargin: 10
anchors.topMargin: 10
text: '<b>'+ lap +'</b>'
}
text: '<b>'+ lap +'</b>'
Il testo visualizzato qui è una stringa concatenata, composta da
due tag HTML (<b> e </b>) e il testo lap che rappresenta il valore del
rispettivo campo del generico elemento in lista, cioè:
Molto bello tutto cio!
Ma che me ne faccio?
La cosa migliore è fare prove guardando il materiale che si trova in
rete, poi si può chiedere aiuto sul forum di Qt-Italia.org o sui vari forum
internazionali.
Qt Quick è uno strumento potente che sta iniziando a farsi conoscere,
la sua forza sta nella semplicità e nel fatto che è indipendente dal
sistema operativo. Attualmente le applicazioni Qt Quick possono girare
sui sistemi desktop (Windows, OSX, Linux), sui sistemi per
smartphone/tablet (Android, iOS, Windows Phone) e tutte le schede
embedded usate dai maker (una per tutte Raspberry PI) oppure
schede per applicazioni real time.

More Related Content

What's hot

C(99) gtk 01 - introduzione e finestre
C(99) gtk   01 - introduzione e finestreC(99) gtk   01 - introduzione e finestre
C(99) gtk 01 - introduzione e finestreMaurizio Carboni
 
C(99) gtk 03 - le immagini
C(99) gtk   03 - le immaginiC(99) gtk   03 - le immagini
C(99) gtk 03 - le immaginiMaurizio Carboni
 
Introduzione alla programmazione android - Android@tulug lezione 3
Introduzione alla programmazione android - Android@tulug lezione 3Introduzione alla programmazione android - Android@tulug lezione 3
Introduzione alla programmazione android - Android@tulug lezione 3Ivan Gualandri
 
C(99) gtk 04 - label,button e entry
C(99) gtk   04 - label,button e entryC(99) gtk   04 - label,button e entry
C(99) gtk 04 - label,button e entryMaurizio Carboni
 
Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2Ivan Gualandri
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIvan Gualandri
 
Introduzione alla programmazione Android - Android@tulug lezione 4
Introduzione alla programmazione Android - Android@tulug lezione 4Introduzione alla programmazione Android - Android@tulug lezione 4
Introduzione alla programmazione Android - Android@tulug lezione 4Ivan Gualandri
 
Chakra 2012.9 rec
Chakra 2012.9 recChakra 2012.9 rec
Chakra 2012.9 reckdekda
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a JavascriptRiccardo Piccioni
 
PyPaPi Qt Java Framework
PyPaPi Qt Java FrameworkPyPaPi Qt Java Framework
PyPaPi Qt Java FrameworkTiziano Lattisi
 
Introduzione a WebGL
Introduzione a WebGLIntroduzione a WebGL
Introduzione a WebGLnigerpunk
 

What's hot (13)

C(99) gtk 01 - introduzione e finestre
C(99) gtk   01 - introduzione e finestreC(99) gtk   01 - introduzione e finestre
C(99) gtk 01 - introduzione e finestre
 
C(99) gtk 03 - le immagini
C(99) gtk   03 - le immaginiC(99) gtk   03 - le immagini
C(99) gtk 03 - le immagini
 
Introduzione alla programmazione android - Android@tulug lezione 3
Introduzione alla programmazione android - Android@tulug lezione 3Introduzione alla programmazione android - Android@tulug lezione 3
Introduzione alla programmazione android - Android@tulug lezione 3
 
C(99) gtk 04 - label,button e entry
C(99) gtk   04 - label,button e entryC(99) gtk   04 - label,button e entry
C(99) gtk 04 - label,button e entry
 
Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
 
Introduzione alla programmazione Android - Android@tulug lezione 4
Introduzione alla programmazione Android - Android@tulug lezione 4Introduzione alla programmazione Android - Android@tulug lezione 4
Introduzione alla programmazione Android - Android@tulug lezione 4
 
Introduzione a Latex
Introduzione a LatexIntroduzione a Latex
Introduzione a Latex
 
Chakra 2012.9 rec
Chakra 2012.9 recChakra 2012.9 rec
Chakra 2012.9 rec
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
 
Design Pattern
Design PatternDesign Pattern
Design Pattern
 
PyPaPi Qt Java Framework
PyPaPi Qt Java FrameworkPyPaPi Qt Java Framework
PyPaPi Qt Java Framework
 
Introduzione a WebGL
Introduzione a WebGLIntroduzione a WebGL
Introduzione a WebGL
 

Viewers also liked

Qt Lezione1: Creare una dialog Window con Qt Creator in 10 semplici passi
Qt Lezione1: Creare una dialog Window con Qt Creator  in 10 semplici passiQt Lezione1: Creare una dialog Window con Qt Creator  in 10 semplici passi
Qt Lezione1: Creare una dialog Window con Qt Creator in 10 semplici passiPaolo Sereno
 
Integrazione QML / C++
Integrazione QML / C++Integrazione QML / C++
Integrazione QML / C++Paolo Sereno
 
Che cosa è il Qt Framework
Che cosa è il Qt FrameworkChe cosa è il Qt Framework
Che cosa è il Qt FrameworkPaolo Sereno
 
Qt Creator: the secret weapon of any c++ programmer
Qt Creator: the secret weapon of any c++ programmerQt Creator: the secret weapon of any c++ programmer
Qt Creator: the secret weapon of any c++ programmerDeveler S.r.l.
 
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxTrace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxDeveler S.r.l.
 
Qt roadmap: the future of Qt
Qt roadmap: the future of QtQt roadmap: the future of Qt
Qt roadmap: the future of QtDeveler S.r.l.
 
Qt Quick GUI Programming with PySide
Qt Quick GUI Programming with PySideQt Quick GUI Programming with PySide
Qt Quick GUI Programming with PySidepycontw
 
Creating Slick User Interfaces With Qt
Creating Slick User Interfaces With QtCreating Slick User Interfaces With Qt
Creating Slick User Interfaces With QtEspen Riskedal
 

Viewers also liked (8)

Qt Lezione1: Creare una dialog Window con Qt Creator in 10 semplici passi
Qt Lezione1: Creare una dialog Window con Qt Creator  in 10 semplici passiQt Lezione1: Creare una dialog Window con Qt Creator  in 10 semplici passi
Qt Lezione1: Creare una dialog Window con Qt Creator in 10 semplici passi
 
Integrazione QML / C++
Integrazione QML / C++Integrazione QML / C++
Integrazione QML / C++
 
Che cosa è il Qt Framework
Che cosa è il Qt FrameworkChe cosa è il Qt Framework
Che cosa è il Qt Framework
 
Qt Creator: the secret weapon of any c++ programmer
Qt Creator: the secret weapon of any c++ programmerQt Creator: the secret weapon of any c++ programmer
Qt Creator: the secret weapon of any c++ programmer
 
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxTrace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
 
Qt roadmap: the future of Qt
Qt roadmap: the future of QtQt roadmap: the future of Qt
Qt roadmap: the future of Qt
 
Qt Quick GUI Programming with PySide
Qt Quick GUI Programming with PySideQt Quick GUI Programming with PySide
Qt Quick GUI Programming with PySide
 
Creating Slick User Interfaces With Qt
Creating Slick User Interfaces With QtCreating Slick User Interfaces With Qt
Creating Slick User Interfaces With Qt
 

Similar to Sviluppo di App con Qt Quick: un esempio di model-view-delegate

Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8Valerio Radice
 
ASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel ModelASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel ModelManuel Scapolan
 
DNM19 Sessione2 Orchard Temi e Layout (Ita)
DNM19 Sessione2 Orchard Temi e Layout (Ita)DNM19 Sessione2 Orchard Temi e Layout (Ita)
DNM19 Sessione2 Orchard Temi e Layout (Ita)Alessandro Giorgetti
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRSManuel Scapolan
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuerySandro Marcon
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angulardotnetcode
 
Introduzione ai componenti in Angular 4
Introduzione ai componenti in Angular 4Introduzione ai componenti in Angular 4
Introduzione ai componenti in Angular 4Giovanni Buffa
 
Digital 1nn0vation saturday pn 2019 - ML.NET
Digital 1nn0vation saturday pn 2019 - ML.NETDigital 1nn0vation saturday pn 2019 - ML.NET
Digital 1nn0vation saturday pn 2019 - ML.NETMarco Zamana
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsAndrea Dottor
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018Marco Parenzan
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateManuel Scapolan
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerMatteo Magni
 
Build a LINQ-enabled Repository
Build a LINQ-enabled RepositoryBuild a LINQ-enabled Repository
Build a LINQ-enabled RepositoryAndrea Saltarello
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerMatteo Magni
 

Similar to Sviluppo di App con Qt Quick: un esempio di model-view-delegate (20)

Components
ComponentsComponents
Components
 
Angular Components e Pipe
Angular Components e PipeAngular Components e Pipe
Angular Components e Pipe
 
Lezione js pdatabasecrudterzaparte
Lezione js pdatabasecrudterzaparteLezione js pdatabasecrudterzaparte
Lezione js pdatabasecrudterzaparte
 
Lezione JSP database Crud
Lezione JSP database CrudLezione JSP database Crud
Lezione JSP database Crud
 
Many Designs Elements
Many Designs ElementsMany Designs Elements
Many Designs Elements
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 
ASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel ModelASP.NET MVC 3 - Trasportare i dati nel Model
ASP.NET MVC 3 - Trasportare i dati nel Model
 
DNM19 Sessione2 Orchard Temi e Layout (Ita)
DNM19 Sessione2 Orchard Temi e Layout (Ita)DNM19 Sessione2 Orchard Temi e Layout (Ita)
DNM19 Sessione2 Orchard Temi e Layout (Ita)
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuery
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 
Introduzione ai componenti in Angular 4
Introduzione ai componenti in Angular 4Introduzione ai componenti in Angular 4
Introduzione ai componenti in Angular 4
 
LIT_2.pdf
LIT_2.pdfLIT_2.pdf
LIT_2.pdf
 
Digital 1nn0vation saturday pn 2019 - ML.NET
Digital 1nn0vation saturday pn 2019 - ML.NETDigital 1nn0vation saturday pn 2019 - ML.NET
Digital 1nn0vation saturday pn 2019 - ML.NET
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.js
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernate
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesigner
 
Build a LINQ-enabled Repository
Build a LINQ-enabled RepositoryBuild a LINQ-enabled Repository
Build a LINQ-enabled Repository
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesigner
 

Sviluppo di App con Qt Quick: un esempio di model-view-delegate

  • 1. Sviluppare App Android (e iOS) con Qt Quick Paolo Sereno Model-View-Delegate
  • 2. Di cosa parleremo? Design Pattern di Qt (e Qt Quick): Model View Delegate
  • 3. Chi Sono ?  …un informatico  Seguo l’evoluzione del Qt Application Framework dal lontano 2003  Nell’ottobre 2009 ho fondato la web community www.qt-italia.org (chi vuol collaborare… serve aiuto!)
  • 4. Un po’ di pubblicità… Ciò che vedrete oggi in queste slide è tratto dall’ultimo capitolo del mio libro. QML Quanto Basta: La guida all’uso di Qt Quick in Italiano A partire dal 30 settembre 2015 sarà disponibile in formato Kindle su Amazon: http://www.amazon.it/dp/B012WXGA10 …per la versione cartacea datemi tempo è un lavoraccio!
  • 5. Parliamo di Model View Delegate Nell'implementazione Model-View-Delegate:  Il modello (Model) comunica con la sorgente dei dati realizzando un'interfaccia verso gli altri componenti dell'architettura.  La vista (View) riceve dal modello le informazioni per rappresentare i dati ed  Il Delegate provvede infine alla visualizzazione vera e propria e modifica (editing).
  • 6. Il Model Il modello fornisce i dati al delegate attraverso il meccanismo dei data roles. Qt Quick fornisce diversi modelli dati di base ed implementa meccanismi per consentire di definire modelli in linguaggio C++ e rappresentarne i dati in QML. ListModel { id: colorModel ListElement { name: "Rosso" value: 1 } ListElement { name: "Verde" value: 2 } ListElement { name: "Blu" value: 3 } }
  • 7. View Le View non sono altro che contenitori di elementi, esse possono essere completamente personalizzate per adattarne lo stile ed il comportamento in funzione dell'applicazione che si vuol realizzare. ListView { anchors.fill: parent model: colorModel delegate: nameDelegate }
  • 8. Il Delegate Il delegate, responsabile della visualizzazione dei dati del modello, deve specificare il role da usare per l'interrogazione del modello. Nell'esempio sotto riportato, il Delegate è un componente che contiene un solo campo di testo (Text) ed impiega il role name come contenuto da visualizzare (nello statement text: ) Component { id: nameDelegate Text { text: name; font.pixelSize: 24 anchors.left: parent.left anchors.leftMargin: 2 } }
  • 9. Una visione d’insieme // main.qml import QtQuick 2.5 import QtQuick.Window 2.2 Window { visible: true width: 640 height: 480 ListModel { id: colorModel ListElement { name: "Rosso" value: 1 } ListElement { name: "Verde" value: 2 } ListElement { name: "Blu" value: 3 } } ListView { anchors.fill: parent model: colorModel delegate: nameDelegate } Component { id: nameDelegate Text { text: name; font.pixelSize: 24 anchors.left: parent.left anchors.leftMargin: 2 } } }
  • 10. Ma com’è fatto questo coso?
  • 11. Così! Con una lista fatta così… ListModel { id:myModel } Una view fatta così… ListView { id:view1 model:myModel delegate: myDelegate }
  • 12. …e il delegate? …con un delegate così strutturato: Item { anchors.fill: parent Text { } Text { } Text { } Text { }
  • 13. Fatemi capire! Component { id: myDelegate Rectangle { id:itemDel width: background.width height: 90 color:"Black" border.color: "darkGreen" border.width: 1 Column { id:col Item { anchors.fill: parent Text { id:delegateText1; color:"Orange"; font.pointSize: 10 anchors.left: parent.left; anchors.leftMargin: 10 text: "<b>Numero Giro</b> " } Qui vediamo una porzione del «coso» in questa slide…
  • 14. Come si appendono dati alla lista? Mediante i «roles»: che saranno lap e value! myModel.append({"lap":<numero>,"value":<valore>}); …in questo modo, nella funzione di append, andiamo a dire al modello quali sono i dati che un generico Item deve contenere... e che valore hanno.
  • 15. Come si leggono i dati della lista? Mediante i soliti «roles»: che saranno lap e value! Text { anchors.top:delegateText1.bottom color:"White" font.pointSize: 20 anchors.left: parent.left anchors.leftMargin: 10 anchors.topMargin: 10 text: '<b>'+ lap +'</b>' } text: '<b>'+ lap +'</b>' Il testo visualizzato qui è una stringa concatenata, composta da due tag HTML (<b> e </b>) e il testo lap che rappresenta il valore del rispettivo campo del generico elemento in lista, cioè:
  • 16. Molto bello tutto cio! Ma che me ne faccio? La cosa migliore è fare prove guardando il materiale che si trova in rete, poi si può chiedere aiuto sul forum di Qt-Italia.org o sui vari forum internazionali. Qt Quick è uno strumento potente che sta iniziando a farsi conoscere, la sua forza sta nella semplicità e nel fatto che è indipendente dal sistema operativo. Attualmente le applicazioni Qt Quick possono girare sui sistemi desktop (Windows, OSX, Linux), sui sistemi per smartphone/tablet (Android, iOS, Windows Phone) e tutte le schede embedded usate dai maker (una per tutte Raspberry PI) oppure schede per applicazioni real time.