Your SlideShare is downloading. ×
0
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

709

Published on

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

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
709
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
13
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×