SlideShare a Scribd company logo
1 of 19
Qt toolkit e PyPaPi Framework

          Tiziano Lattisi
Indice degli argomenti

•   Introduzione al toolkit grafico Qt e a Qt Jambi
•   HelloWorld.java
•   Architettura Signal/Slot in Qt
•   HelloWorldMore.java (signal/slot)
•   Architettura Model/View in Qt
•   HelloWorldMoreMore.java (QAbstractTableModel)
•   Strumenti Qt: Designer, Linguist, Assistant (Creator...)
•   JPA2: rapidissimo sguardo
•   PyPaPi: progetto
•   PyPaPi: architettura
•   PyPaPi: esempio biblioteca
•   Riferimenti e ringraziamenti
Introduzione al toolkit grafico Qt

• "Qt è una libreria multipiattaforma per lo sviluppo di
  programmi coninterfaccia grafica tramite l'uso di widget"
  (Wikipedia)
• 1991: inizio sviluppo (Haavard Nord e Eirik Chambe-Eng)
• Licenze: 1.45 FreeQt, 2.0 QPL, 2.2 GPL+QPL, 3 GPL
• gennaio 2009: LGPL (Nokia acquisisce Trolltech nel 2009)
• in C++, estesa in C; binding Java, Python, Perl, C, Php
• Windows (+CE/mobile), Symbian, Mac OSX, X11,
  Maemo/MeeGo, Wayland, Linux embedded (+non ufficiali)
• Qt Creator (C++), Qt Designer, Qt Linguist, ...
• Qt-Jambi: velocità "nativa", look&feel, flessibilità
HelloWorld.java

import com.trolltech.qt.gui.*;

public class HelloWorld {

    public static void main(String[] args) {

        QApplication.initialize(args);

        QMainWindow win = new QMainWindow();
        QLabel label = new QLabel("Hello World!");
        win.setCentralWidget(label);
        win.show();

        QApplication.execStatic();
    }
}
Architettura Signal/Slot in Qt
HelloWorldMore.java
class MyWindow extends QMainWindow {

    private QLabel label = new QLabel(" --- ");
    private QPushButton bPress = new QPushButton("Press!");
    private QPushButton bQuit = new QPushButton("Quit");

    public MyWindow(){
        this.setCentralWidget(new QWidget());
        this.centralWidget().setLayout(new QHBoxLayout());
        this.centralWidget().layout().addWidget(label);
        this.centralWidget().layout().addWidget(bPress);
        this.centralWidget().layout().addWidget(bQuit);

        bQuit.clicked.connect(this, "close()");
        bPress.clicked.connect(this, "press()");
    }

    private void press(){
        this.label.setText("Hello World!");
    }
}
Architettura Model/View in Qt

              • Il model comunica con i dati, ed
                espone un'interfaccia verso il resto
                dell'architettura
              • la view ottiene un index dal
                modello, e lo utilizza per ottenere i
                dati
              • QAbstractItemModel
              • QAbstractItemView
              • QAbstractItemDelegate
QAbstractItemModel (QAbstractTableModel)




  • implementazione di index(), parent(), rowCount(),
    columnCount(), data() (read-only)
  • QAbstractTableModel implementa già index() e parent()
  • implementazione di setData() e reimplementazione di
    flags() (return ItemEditable)
QAbstractItemView




QListView      QTableView   QTreeView
QAbstractItemDelegate




 • E' usato per mostrare e editare dati da un modello.
 • Personalizzazione attraverso la reimplementazione di
   paint() e sizeHint().
 • QItemDelegate ha già quello che serve, se non devo
   personalizzare
HelloWorldMoreMore.java
class MyModel extends QAbstractTableModel {

    @Override
    public int columnCount(QModelIndex qmi) { return 2; }

    @Override
    public int rowCount(QModelIndex qmi) { return 3; }

    @Override
    public Object data(QModelIndex qmi, int i) {
        if( i == ItemDataRole.CheckStateRole){
            return null;
        }
        return "Riga "+qmi.row()+" colonna "+qmi.column();
    }
}
Strumenti Qt


•   Qt Creator (C++ IDE)
•   Qt Assistant (help system)
•   Qt Linguist (internationalization tools)
•   Qt Designer (forms builder)
•   Qt Quick Designer (apps e touch UI)
•   Integrazioni IDE: Eclipse, Visual Studio
JPA2 rapidissimo sguardo


Fai click per aggiungere contenuto
PyPaPi: progetto


Separazione degli skill tra lo sviluppatore framework
e lo sviluppatore dell'applicazione

• creazione di modello dati e layout = 90%
• dichiara una sola volta, in un un solo punto
• "devo proprio chiederlo allo sviluppatore, o posso già
  dedurlo implicitamente?"
PyPaPi: architettura
PyPaPi: esempio (base dati)
PyPaPi: esempio (form)
PyPaPi: esempio codice (sì, tutto)
/* main code */
Application.initialize(args);
Database db = new Database();
db.open("BiblioPU");

Form formBook = Register.registerForm(db.getEntityManagerFactory(),
                    "classpath:biblio/forms/book.ui", Book.class);
Form formPerson = Register.registerForm(db.getEntityManagerFactory(),
                    "classpath:biblio/forms/person.ui", Person.class);
Form formLoan = Register.registerForm(db.getEntityManagerFactory(),
                    "classpath:biblio/forms/loan.ui", Loan.class);

Register.registerAdapters(Resolver.adaptersFromEntityClass(Book.class));

formPerson.show();
Application.exec();

/* added method in Book entity */
@Adapter
public static Loan adaptToLoan(Book book){
   Loan loan = new Loan();
   loan.setBook(book);
   return loan;
}
Riferimenti e ringraziamenti

 •   PyPaPi (http://www.pypapi.org)
 •   Sorgenti PyPaPi (http://code.google.com/p/pypapi)
 •   Qt Dev Network (http://qt-project.org/)
 •   Qt-Jambi (http://qt-jambi.org)

                                GRAZIE

                           Tiziano Lattisi
                            tiziano@axiastudio.it
                  http://www.linkedin.com/in/tizianolattisi
                      http://www.facebook.com/lattisi

More Related Content

Similar to PyPaPi Qt Java Framework

Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiPaolo Sereno
 
Introduzione ai Big Data e alla scienza dei dati - Big Data
Introduzione ai Big Data e alla scienza dei dati - Big DataIntroduzione ai Big Data e alla scienza dei dati - Big Data
Introduzione ai Big Data e alla scienza dei dati - Big DataVincenzo Manzoni
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftStefano Benedetti
 
Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0firenze-gtug
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Wellnet srl
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Eugenio Minardi
 
Applicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaApplicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaNicolò Carandini
 
Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...
Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...
Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...Dominopoint - Italian Lotus User Group
 
Self hosted Services with .NET OWin
Self hosted Services with .NET OWinSelf hosted Services with .NET OWin
Self hosted Services with .NET OWinNicolò Carandini
 
Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...
Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...
Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...Codemotion
 
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...Federico Feroldi
 
Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...
Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...
Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...Codemotion
 
Html5 e css3 nuovi strumenti per un nuovo web
Html5 e css3 nuovi strumenti per un nuovo webHtml5 e css3 nuovi strumenti per un nuovo web
Html5 e css3 nuovi strumenti per un nuovo webMassimo Bonanni
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...azuredayit
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client Sabino Labarile
 
Mob03 what's new in windows phone
Mob03   what's new in windows phoneMob03   what's new in windows phone
Mob03 what's new in windows phoneDotNetCampus
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceGiuseppe Toto
 

Similar to PyPaPi Qt Java Framework (20)

Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immagini
 
Introduzione ai Big Data e alla scienza dei dati - Big Data
Introduzione ai Big Data e alla scienza dei dati - Big DataIntroduzione ai Big Data e alla scienza dei dati - Big Data
Introduzione ai Big Data e alla scienza dei dati - Big Data
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
 
Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0
 
OpenStreetMap per il web
OpenStreetMap per il webOpenStreetMap per il web
OpenStreetMap per il web
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Applicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaApplicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e Katana
 
Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...
Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...
Dati, dati, dati! - Sfruttare le potenzialità delle XPages con Google Chart T...
 
Self hosted Services with .NET OWin
Self hosted Services with .NET OWinSelf hosted Services with .NET OWin
Self hosted Services with .NET OWin
 
Qt Lezione6
Qt Lezione6Qt Lezione6
Qt Lezione6
 
Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...
Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...
Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...
 
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...
 
Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...
Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...
Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...
 
Html5 e css3 nuovi strumenti per un nuovo web
Html5 e css3 nuovi strumenti per un nuovo webHtml5 e css3 nuovi strumenti per un nuovo web
Html5 e css3 nuovi strumenti per un nuovo web
 
VS Package @ CD2008
VS Package @ CD2008VS Package @ CD2008
VS Package @ CD2008
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
 
Mob03 what's new in windows phone
Mob03   what's new in windows phoneMob03   what's new in windows phone
Mob03 what's new in windows phone
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
 

More from Tiziano Lattisi

ZoeFX: un framework MVC per JavaFX
ZoeFX: un framework MVC per JavaFXZoeFX: un framework MVC per JavaFX
ZoeFX: un framework MVC per JavaFXTiziano Lattisi
 
Groovy e Domain Specific Languages
Groovy e Domain Specific LanguagesGroovy e Domain Specific Languages
Groovy e Domain Specific LanguagesTiziano Lattisi
 

More from Tiziano Lattisi (6)

JugTAAS ReSTful
JugTAAS ReSTfulJugTAAS ReSTful
JugTAAS ReSTful
 
ZoeFX: un framework MVC per JavaFX
ZoeFX: un framework MVC per JavaFXZoeFX: un framework MVC per JavaFX
ZoeFX: un framework MVC per JavaFX
 
Groovy e Domain Specific Languages
Groovy e Domain Specific LanguagesGroovy e Domain Specific Languages
Groovy e Domain Specific Languages
 
JavaFX2: una panoramica
JavaFX2: una panoramicaJavaFX2: una panoramica
JavaFX2: una panoramica
 
VCS - DVCS - GIT-FLOW
VCS - DVCS - GIT-FLOWVCS - DVCS - GIT-FLOW
VCS - DVCS - GIT-FLOW
 
JPA2 - a brief intro
JPA2 - a brief introJPA2 - a brief intro
JPA2 - a brief intro
 

PyPaPi Qt Java Framework

  • 1. Qt toolkit e PyPaPi Framework Tiziano Lattisi
  • 2. Indice degli argomenti • Introduzione al toolkit grafico Qt e a Qt Jambi • HelloWorld.java • Architettura Signal/Slot in Qt • HelloWorldMore.java (signal/slot) • Architettura Model/View in Qt • HelloWorldMoreMore.java (QAbstractTableModel) • Strumenti Qt: Designer, Linguist, Assistant (Creator...) • JPA2: rapidissimo sguardo • PyPaPi: progetto • PyPaPi: architettura • PyPaPi: esempio biblioteca • Riferimenti e ringraziamenti
  • 3. Introduzione al toolkit grafico Qt • "Qt è una libreria multipiattaforma per lo sviluppo di programmi coninterfaccia grafica tramite l'uso di widget" (Wikipedia) • 1991: inizio sviluppo (Haavard Nord e Eirik Chambe-Eng) • Licenze: 1.45 FreeQt, 2.0 QPL, 2.2 GPL+QPL, 3 GPL • gennaio 2009: LGPL (Nokia acquisisce Trolltech nel 2009) • in C++, estesa in C; binding Java, Python, Perl, C, Php • Windows (+CE/mobile), Symbian, Mac OSX, X11, Maemo/MeeGo, Wayland, Linux embedded (+non ufficiali) • Qt Creator (C++), Qt Designer, Qt Linguist, ... • Qt-Jambi: velocità "nativa", look&feel, flessibilità
  • 4. HelloWorld.java import com.trolltech.qt.gui.*; public class HelloWorld { public static void main(String[] args) { QApplication.initialize(args); QMainWindow win = new QMainWindow(); QLabel label = new QLabel("Hello World!"); win.setCentralWidget(label); win.show(); QApplication.execStatic(); } }
  • 6. HelloWorldMore.java class MyWindow extends QMainWindow { private QLabel label = new QLabel(" --- "); private QPushButton bPress = new QPushButton("Press!"); private QPushButton bQuit = new QPushButton("Quit"); public MyWindow(){ this.setCentralWidget(new QWidget()); this.centralWidget().setLayout(new QHBoxLayout()); this.centralWidget().layout().addWidget(label); this.centralWidget().layout().addWidget(bPress); this.centralWidget().layout().addWidget(bQuit); bQuit.clicked.connect(this, "close()"); bPress.clicked.connect(this, "press()"); } private void press(){ this.label.setText("Hello World!"); } }
  • 7. Architettura Model/View in Qt • Il model comunica con i dati, ed espone un'interfaccia verso il resto dell'architettura • la view ottiene un index dal modello, e lo utilizza per ottenere i dati • QAbstractItemModel • QAbstractItemView • QAbstractItemDelegate
  • 8. QAbstractItemModel (QAbstractTableModel) • implementazione di index(), parent(), rowCount(), columnCount(), data() (read-only) • QAbstractTableModel implementa già index() e parent() • implementazione di setData() e reimplementazione di flags() (return ItemEditable)
  • 9. QAbstractItemView QListView QTableView QTreeView
  • 10. QAbstractItemDelegate • E' usato per mostrare e editare dati da un modello. • Personalizzazione attraverso la reimplementazione di paint() e sizeHint(). • QItemDelegate ha già quello che serve, se non devo personalizzare
  • 11. HelloWorldMoreMore.java class MyModel extends QAbstractTableModel { @Override public int columnCount(QModelIndex qmi) { return 2; } @Override public int rowCount(QModelIndex qmi) { return 3; } @Override public Object data(QModelIndex qmi, int i) { if( i == ItemDataRole.CheckStateRole){ return null; } return "Riga "+qmi.row()+" colonna "+qmi.column(); } }
  • 12. Strumenti Qt • Qt Creator (C++ IDE) • Qt Assistant (help system) • Qt Linguist (internationalization tools) • Qt Designer (forms builder) • Qt Quick Designer (apps e touch UI) • Integrazioni IDE: Eclipse, Visual Studio
  • 13. JPA2 rapidissimo sguardo Fai click per aggiungere contenuto
  • 14. PyPaPi: progetto Separazione degli skill tra lo sviluppatore framework e lo sviluppatore dell'applicazione • creazione di modello dati e layout = 90% • dichiara una sola volta, in un un solo punto • "devo proprio chiederlo allo sviluppatore, o posso già dedurlo implicitamente?"
  • 18. PyPaPi: esempio codice (sì, tutto) /* main code */ Application.initialize(args); Database db = new Database(); db.open("BiblioPU"); Form formBook = Register.registerForm(db.getEntityManagerFactory(), "classpath:biblio/forms/book.ui", Book.class); Form formPerson = Register.registerForm(db.getEntityManagerFactory(), "classpath:biblio/forms/person.ui", Person.class); Form formLoan = Register.registerForm(db.getEntityManagerFactory(), "classpath:biblio/forms/loan.ui", Loan.class); Register.registerAdapters(Resolver.adaptersFromEntityClass(Book.class)); formPerson.show(); Application.exec(); /* added method in Book entity */ @Adapter public static Loan adaptToLoan(Book book){ Loan loan = new Loan(); loan.setBook(book); return loan; }
  • 19. Riferimenti e ringraziamenti • PyPaPi (http://www.pypapi.org) • Sorgenti PyPaPi (http://code.google.com/p/pypapi) • Qt Dev Network (http://qt-project.org/) • Qt-Jambi (http://qt-jambi.org) GRAZIE Tiziano Lattisi tiziano@axiastudio.it http://www.linkedin.com/in/tizianolattisi http://www.facebook.com/lattisi