SlideShare a Scribd company logo
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

PDF
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
PDF
O uso de frameworks em aplicações desktop baseadas na metodologia de desenvol...
PPTX
Utilização do JDB Framework para agilizar o desenvolvimento em Java Desktop
PDF
Qt Lezione4 Parte1: creare un custom widget plugin
ODP
Ubuntu Touch: Sviluppo App e Convergenza
ODP
PDF
Qt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
O uso de frameworks em aplicações desktop baseadas na metodologia de desenvol...
Utilização do JDB Framework para agilizar o desenvolvimento em Java Desktop
Qt Lezione4 Parte1: creare un custom widget plugin
Ubuntu Touch: Sviluppo App e Convergenza
Qt Lezione0: uso del C++ per scrivere applicazioni Qt

Similar to PyPaPi Qt Java Framework (20)

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

More from Tiziano Lattisi (6)

PDF
JugTAAS ReSTful
PDF
ZoeFX: un framework MVC per JavaFX
PDF
Groovy e Domain Specific Languages
PDF
JavaFX2: una panoramica
PDF
VCS - DVCS - GIT-FLOW
PDF
JPA2 - a brief intro
JugTAAS ReSTful
ZoeFX: un framework MVC per JavaFX
Groovy e Domain Specific Languages
JavaFX2: una panoramica
VCS - DVCS - GIT-FLOW
JPA2 - a brief intro
Ad

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