Your SlideShare is downloading. ×
PyPaPi Qt Java Framework
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

PyPaPi Qt Java Framework

684
views

Published on

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

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
684
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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 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. 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. Architettura Signal/Slot in Qt
  • 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. 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. 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. QAbstractItemViewQListView 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.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. 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 sguardoFai click per aggiungere contenuto
  • 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. PyPaPi: architettura
  • 16. PyPaPi: esempio (base dati)
  • 17. PyPaPi: esempio (form)
  • 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. 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