140 likes | 256 Views
Qt-käyttöliittymäkirjasto. Matti Lehtinen 27.11.2007. Esitelmän rakenne. Qt yleisesti Työkalut Kääntäminen Kirjastomoduulit Tapahtumienkäsittely Esimerkki Yhteenveto. Qt yleisesti. Graafinen käyttöliittymäkirjasto Norjalaisen Trolltech-yrityksen kehittämä
E N D
Qt-käyttöliittymäkirjasto Matti Lehtinen 27.11.2007
Esitelmän rakenne • Qt yleisesti • Työkalut • Kääntäminen • Kirjastomoduulit • Tapahtumienkäsittely • Esimerkki • Yhteenveto
Qt yleisesti • Graafinen käyttöliittymäkirjasto • Norjalaisen Trolltech-yrityksen kehittämä • Toimii useammilla käyttöjärjestelmillä • C++ ja Java • Lisenssit kaupalliseen ja avoimeen kehitykseen • Kaupallinen tarjoaa eri versioita eri käyttötarkoituksiin
Työkalut (1/2) • Designer • Käyttöliittymien rakentamiseen • Oman koodin kirjoittaminen ei mahdollista • Laaja komponenttivalikoima • Löytyy lisäosana useammalle IDE:lle
Työkalut (2/2) • Linquist • Helpottaa kielien kääntämistä • Monia pienempiä työkaluja • Lähdekoodit mukana • Assistant, dokumentaation navigointiin
Kääntäminen • C++ kääntäjää ja linkittäjää ei ole mukana • Qmake, kuvaustiedostojen (makefile) tekemiseen • Toimii projektitiedostojen mukaan • Uic (User Interface Compiler) • Moc (Meta Object Compiler)
Kirjastomoduulit • Core • GUI • OpenGL • Verkko • Tietokanta • XML
Tapahtumienkäsittely • Signal-slot-mekanismi • Tyyppien tarkistus • Yhdistelmien tekeminen vapaata • Luokkien ei tarvitse tuntea toisiaan • Yhdistelmiä rajattomasti • Periytyvät normaalisti • Turvallista käyttää säikeitten kanssa • Ei yhteensopiva C++:n poikkeuksienkäsittelyn kanssa
Esimerkkisovellus (2/4) • hellowindow.h #include <qpushbutton.h> #include <qtimer.h> class HelloWindow : public QPushButton { Q_OBJECT private: QTimer *timer; unsigned int timeLeft; public: HelloWindow(); private slots: void updateTime(); signals: void helloQuits(); };
Esimerkkisovellus (3/4) • hellowindow.cpp #include "hellowindow.h" HelloWindow::HelloWindow() { timeLeft = 10; timer = new QTimer(this); this->connect(timer, SIGNAL(timeout()), this, SLOT(updateTime())); this->connect(this, SIGNAL(clicked()), this, SIGNAL(helloQuits())); setWindowTitle(tr("Hello World!")); resize(200, 60); updateTime(); timer->setInterval(1000); timer->start(); } void HelloWindow::updateTime() { if (!(--timeLeft)) emit helloQuits(); this->setText(tr("Quit") + "..." + QString::number(timeLeft)); }
Esimerkkisovellus (4/4) • main.cpp #include <qapplication.h> #include "hellowindow.h" int main(int argc, char **argv) { QApplication app(argc, argv); HelloWindow hello; QObject::connect(&hello, SIGNAL(helloQuits()), &app, SLOT(quit())); hello.show(); return app.exec(); }
Yhteenveto + Helppo ja monipuolinen kirjasto + Turvallinen tapahtumienkäsittely + C++ - Signal-slot-mekanismi ei yhtä nopeaa kuin suora takaisinkutsu - Ei yhteensopiva C++:n poikkeuksienkäsittelyn kanssa