Qt-käyttöliittymäkirjasto Matti Lehtinen
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 (1/4)
Esimerkkisovellus (2/4) hellowindow.h #include 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 #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
Kiitos!