QT framework Juha Järvensivu juha.jarvensivu@tut.fi 2007
QT Framework QT Class Library QT Designer QT Assistant QT Linguist http://trolltech.com
QT Class Library C++ API >400 luokkaa Kattava widget kirjasto Hyvä tuki omien UI-komponenttien toteuttamiselle
QT Designer Graafinen käyttöliittymäeditori Voidaan käyttää itsenäisenä ohjelmana tai integroida kehitysympäristöön Visual Studio integration Eclipse integration Designer Demo http://dist.trolltech.com/video/browser.html
QT Assistant Dokumentaatio Erillinen help-ohjelma, joka voidaan kustomoida käyttäjän tarpeiden mukaan Toiminta samankaltaista kuin selaimissa Bookmarks HTML Next / Prev
QT Linguist QT:n lokalisointityökalu
QT Framework Cross-Platform Rich Client Development Kaksoislinsensointi
Crossplatform environment Qt / Windows Qt / MAC Qt/ X11 Qtopia Core (embedded Linux) Qt Jambi (QT for Java)
Crossplatform environment Sovellukset ajetaan natiivisti (ei tulkata) Tehokasta QT kapseloi käyttöjärjestelmäkohtaisia apeja Tiedostojen käsittely Verkko-ominaisuudet Prosessit Säikeet Tietokanta yhteydet jne.
Dual Lisencing Model Maksullinen kaupallinen versio QT Console Edition QT Desktop Light Edition QT Desktop Edition Open Source versio GPL (v2)
QT Class Library
Qt Class Library Modules Core Module GUI Module Network Module OpenGL 3D Visualization Module Database Module XML Module
QT Core Module QT Object Model QT event processing model QT container classes Threading Process Handling File I/O QThread QString QVector QMetaType QSettings QObject QPoint
QT GUI Module Käyttöliittymäkirjasto Fontit Auto-scaling Input validation styles QButton QWidget QPen QClipboard QDialog QImage QResizeEvent
QT Object Model Hello World Parent-child relationship QPointer Signals and slots Meta object system (moc) Layout
Hello world #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton hello("hello world!"); hello.resize(100, 30); hello.show(); return app.exec(); } http://doc.trolltech.com/4.3/tutorial-t1.html
Parent object Constructor: QWidget(QWidget* pparent = 0); QWindow* pwindow = new QWindow(); QPushButton pbutton = new QPushButton(pWindow); // The destructor of a parent object // destroys all child objects! delete pwindow; QObject QWidget QPushButton
QPointer Turvallinen osoitin Osoitin nollataan automaattisesti kun objekti johon se osoittaa tuhotaan Käytä QPointeria kuten normaaleja osoittimia QPointer<QLabel> plabel = new QLabel; QPointer<QLabel> plabel2 = plabel; plabel->settext( otsikko ); // Myös plabel2 nollautuu! delete plabel;
Signals and Slots QT:n callback-tekniikka http://doc.trolltech.com/4.3/signalsandslots.html
Signals and Slots QPushButton* pbutton = new QPushButton(); connect(pbutton,signal(clicked()),this,slot(on Clicked()); CMyClass::onClicked() { // Add event handler code here }
Signals and Slots class CMyClass : public QObject { Q_OBJECT public: // declare public members here private: // declace private members here signals: void somesignal(int nindex); slots: void clicked(); // slots work also as normal member function };
Signaalin emitointi // Kutsuu kaikkia connectoituneita. // kuuntelijoita. Signaali ei tiedä // kuinka monta kuuntelijaa sillä on. emit somesignal(2);
Meta Object System Signaalit ja eventit tarvitsevat toimiakseen QT:n meta-object mekanismia Kaikki QObject-luokasta suorasti tai epäsuorasti perityt objektit voivat hyödyntää meta-object mekanismia Luokan header-koodiin pitää lisätä Q_OBJECT makro Luokan käännetään meta-object kääntäjällä (moc) käännösprosessin yhteydessä (moc-file)
Meta Object System class CMyClass : public QObject { Q_OBJECT public: // declare public members here private: // declace private members here signals: void somesignal(int nindex); slots: void clicked(); // slots work also as normal member function };
Layoutit (QLayout) QHBoxLayout QVBoxLayout QGridLayout QWidget *window = new QWidget; QPushButton *button1 = new QPushButton("One"); QPushButton *button2 = new QPushButton("Two"); QPushButton *button3 = new QPushButton("Three"); QPushButton *button4 = new QPushButton("Four"); QPushButton *button5 = new QPushButton("Five"); QHBoxLayout *layout = new QHBoxLayout; layout->addwidget(button1); layout->addwidget(button2); layout->addwidget(button3); layout->addwidget(button4); layout->addwidget(button5); window->setlayout(layout); window->show();
Paint System class RenderArea : public QWidget { Q_OBJECT protected: void paintevent(qpaintevent *event); } Event RenderArea::paintEvent(QPaintEvent* event) { QPainter painter(this); painter.setpen(pen); QRect rect(10, 20, 80, 60); painter.drawellipse(rect); painter.restore(); }
QT event loop Kapseloi käyttöjärjestelmän eventit Ohjelmoija voi luoda omia eventtejä (QEvent::user) QObject-luokasta perityt luokat voivat vastaanottaa eventtejä Yleensä virtuaalifunktiota, jotka ylimääritellään omassa koodissa Esim QMouseEvent QKeyEvent QTimerEvent QResizeEvent virtual void paintevent ( QPaintEvent * event ) QCloseEvent QPaintEvent QtCoreApplication::sendEvent(); QtCoreApplication::postEvent();
void event(qevent* event); bool MyWidget::event(QEvent *event) { if (event->type() == QEvent::KeyPress) { QKeyEvent *ke = static_cast<qkeyevent *>(event); if (ke->key() == Qt::Key_Tab) { // special tab handling here return true; } } else if (event->type() == MyCustomEventType) { MyCustomEvent *myevent = static_cast<mycustomevent *>(event); // custom event handling here return true; } return QWidget::event(event); }
Model / View programming MVC-variaatio, jossa V+C sulautettu yhteen Model ja View kommunikoivat QT:n signalslot mekanismilla Delegate-luokkaa huolehtii varsinaisesta piirrosta
Model / View programming Views QListView QTableView QTreeView QAbstarctItemView Models QAbstarctItemModel QDirModel QStandardItemModel QSqlQueryModel QAbstractListModel
Lähteet Throlltech http://trolltech.com/products/qt QT in depth http://trolltech.com/products/qt/indepth/indepth QT Reference Documentation http://doc.trolltech.com/4.3/index.html QT Model-View programming http://doc.trolltech.com/4.3/model-view-programming.html QT Tutorial http://doc.trolltech.com/4.3/tutorial.html QT Classes http://doc.trolltech.com/4.3/classes.html