Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Qt toolkit e PyPaPi Framework          Tiziano Lattisi
Indice degli argomenti•   Introduzione al toolkit grafico Qt e a Qt Jambi•   HelloWorld.java•   Architettura Signal/Slot i...
Introduzione al toolkit grafico Qt• "Qt è una libreria multipiattaforma per lo sviluppo di  programmi coninterfaccia grafi...
HelloWorld.javaimport com.trolltech.qt.gui.*;public class HelloWorld {    public static void main(String[] args) {        ...
Architettura Signal/Slot in Qt
HelloWorldMore.javaclass MyWindow extends QMainWindow {    private QLabel label = new QLabel(" --- ");    private QPushBut...
Architettura Model/View in Qt              • Il model comunica con i dati, ed                espone uninterfaccia verso il...
QAbstractItemModel (QAbstractTableModel)  • implementazione di index(), parent(), rowCount(),    columnCount(), data() (re...
QAbstractItemViewQListView      QTableView   QTreeView
QAbstractItemDelegate • E usato per mostrare e editare dati da un modello. • Personalizzazione attraverso la reimplementaz...
HelloWorldMoreMore.javaclass MyModel extends QAbstractTableModel {    @Override    public int columnCount(QModelIndex qmi)...
Strumenti Qt•   Qt Creator (C++ IDE)•   Qt Assistant (help system)•   Qt Linguist (internationalization tools)•   Qt Desig...
JPA2 rapidissimo sguardoFai click per aggiungere contenuto
PyPaPi: progettoSeparazione degli skill tra lo sviluppatore frameworke lo sviluppatore dellapplicazione• creazione di mode...
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("Biblio...
Riferimenti e ringraziamenti •   PyPaPi (http://www.pypapi.org) •   Sorgenti PyPaPi (http://code.google.com/p/pypapi) •   ...
Upcoming SlideShare
Loading in …5
×

PyPaPi Qt Java Framework

919 views

Published on

PyPaPi - Open Source Framework based on Java, JPA2 and Qt

Published in: Technology, Education
  • Be the first to comment

PyPaPi Qt Java Framework

  1. 1. Qt toolkit e PyPaPi Framework Tiziano Lattisi
  2. 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. 3. Introduzione al toolkit grafico Qt• "Qt è una libreria multipiattaforma per lo sviluppo di programmi coninterfaccia grafica tramite luso 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. 4. HelloWorld.javaimport 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(); }}
  5. 5. Architettura Signal/Slot in Qt
  6. 6. HelloWorldMore.javaclass 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. 7. Architettura Model/View in Qt • Il model comunica con i dati, ed espone uninterfaccia verso il resto dellarchitettura • la view ottiene un index dal modello, e lo utilizza per ottenere i dati • QAbstractItemModel • QAbstractItemView • QAbstractItemDelegate
  8. 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. 9. QAbstractItemViewQListView QTableView QTreeView
  10. 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. 11. HelloWorldMoreMore.javaclass 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. 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. 13. JPA2 rapidissimo sguardoFai click per aggiungere contenuto
  14. 14. PyPaPi: progettoSeparazione degli skill tra lo sviluppatore frameworke lo sviluppatore dellapplicazione• 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?"
  15. 15. PyPaPi: architettura
  16. 16. PyPaPi: esempio (base dati)
  17. 17. PyPaPi: esempio (form)
  18. 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 */@Adapterpublic static Loan adaptToLoan(Book book){ Loan loan = new Loan(); loan.setBook(book); return loan;}
  19. 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

×