Qt perusteet. Juha-Matti Vanhatupa. (vanhan kurssin Graafisen käyttöliittymän ohjelmointi materiaalia)

Samankaltaiset tiedostot
QT framework. Juha Järvensivu 2007

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Voit käyttää tekemääsi ohjelmaa seuraavan viikon harjoituksissa, joten kopio työsi hedelmät talteen äläkä tuhoa niitä.

Qt-käyttöliittymäkirjasto

QT tyylit. Juha Järvensivu 2008

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Graafisen käyttöliittymän ohjelmointi

Graafisen käyttöliittymän ohjelmointi

4. Luokan testaus ja käyttö olion kautta 4.1

Kristina Zharnikova TYÖNVASTAANOTTOJÄRJESTELMÄ

OPETUSSUUNNITELMA SYMBIAN KOULUTUS. Oulussa Koulutuksen aloitus, lähtötason testaus, henkilökohtainen opiskelusuunnitelma

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Tapahtumapohjainen ohjelmointi

Qt pohjaisen paikkatietotyökalun suunnittelu ja toteutus

Qt-ohjelmointitekniikat Java-osaajan näkökulmasta

15. Ohjelmoinnin tekniikkaa 15.1

Jetro Jormalainen. Navigaatio-ohjelman sovittaminen Sailfish-alustalle

Graafisen käyttöliittymän ohjelmointi Syksy 2013

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Mikko Karjalainen QT-KÄYTTÖLIITTYMÄ VERKKOEMULAATTORILLE

Tiedostonkäsittely ja asetusten tallentaminen. Graafisen käyttöliittymän ohjelmointi Luento 14

.NET ajoympäristö. Juha Järvensivu 2007

Graafisen käyttöliittymän ohjelmointi Syksy 2013

15. Ohjelmoinnin tekniikkaa 15.1

C# ja.net. Juha Järvensivu 2007

Ohjelmoinnin peruskurssien laaja oppimäärä

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

TIE Ohjelmistojen suunnittelu. Luento 3: käyttöliittymien toteutustekniikat, QML

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

5. HelloWorld-ohjelma 5.1

9. Periytyminen Javassa 9.1

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

TIE Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Janne Juntunen ASIAKASOSAN STREAMAUKSEN TOTEUTTAMINEN QT- MEDIASOITTIMEEN

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

9. Periytyminen Javassa 9.1

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

5. HelloWorld-ohjelma 5.1

Common Lisp Object System

QT model view. Juha Järvensivu 2008

Rinnakkaisuus (.NET) Juha Järvensivu 2007

Javan perusteita. Janne Käki

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Jypelin käyttöohjeet» Ruutukentän luominen

Osa III. Olioiden luominen vapaalle muistialueelle

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

TIE Ohjelmistojen suunnittelu

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Valppaan asennus- ja käyttöohje

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Osoitin ja viittaus C++:ssa

TIE Ohjelmistojen suunnittelu

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

SEMINAARI ESSEE: DYLAN. TIE Principles of Programming Languages

Sarjallistaminen. Juha Järvensivu 2007

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Loppukurssin järjestelyt C:n edistyneet piirteet

Hakemistojen sisällöt säilötään linkitetyille listalle.

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

Tilastokeskuksen rajapintapalveluiden käyttöönotto QGISohjelmistossa

JÄRJESTELMÄRIIPPUMATTOMAN SOVELLUKSEN TOTEUTTAMINEN C++- KIELELLÄ QT-KEHYSYMPÄRISTÖSSÄ

ITKP102 Ohjelmointi 1 (6 op)

Geneeriset luokat. C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet. Geneerisen luokan käyttö.

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Eclipse 3.2 pikku opas versio 1.0. Esittely Uuden projektin perustaminen Sovelluksen luominen Koodin siistiminen Vinkkejä

Rajapinnat ja olioiden välittäminen

16. Javan omat luokat 16.1

TIE Ohjelmistojen suunnittelu

Microsoft Visual J++ ohjelmointiympäristö

11/20: Konepelti auki

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Loppukurssin järjestelyt

Ohjelmoinnin perusteet Y Python

JAVA-OHJELMOINTI 3 op A274615

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Ohjelmoinnin peruskurssien laaja oppimäärä

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

Ohjelmoinnin peruskurssien laaja oppimäärä

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

Harjoitustyö 1: Kaupungit

Transkriptio:

Qt perusteet Juha-Matti Vanhatupa (vanhan kurssin Graafisen käyttöliittymän ohjelmointi materiaalia)

Sisältö Käännösprosessi MetaObjectSystem Hyödyt Qt:n moduulit Qt käyttöliittymän muistinhallinta Debug-tulosteet ja QPointer

Qt 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.

Käännösprosessi Käännökseen tarvittavat tiedostot luodaan qmake ohjelmalla projektitiedoston (.pro) tietojen perusteella Käyttöliittymätiedostot (.ui) käännetään uic -kääntäjällä (User Interface Compiler) ja metatiedot moc kääntäjällä (Meta Object Compiler) Metakääntäjä generoi väliaikaista c++ kääntäjälle kelpaavaa koodia.

Käännösprosessi

Käännösprosessi Esimerkit käännöksestä - Qt Creatorista - Komentoriviltä

Komentorivikäännös Hakemistossa aluksi: main.cpp, mainwindow.cpp, mainwindow.h ja mainwindow.ui qmake -project // projektitiedoston luominen // Qt 5:ssa lisää itse.pro tiedostoon QT += widgets // jos rivi ei synny automaattisesti qmake // makefilen luonti make // käännös, esimerkissä komento on mingw32-make, koska käytetään MinGW-kääntäjää. Tämän jälkeen ohjelman exe voidaan ajaa. Käytettyjen työkalujen täytyy löytyä Pathympäristömuuttujasta.

MetaObjectSystem C++:n laajennus, jonka tarkoitus tehdä kielestä paremmin sopiva käyttöliittymäohjelmointiin. Mekanismi, jonka avulla toisiaan tuntemattomat oliot voivat kommunikoida. (tärkein hyöty, mutta myös muita on ) Mukana Qt:ssa alusta asti.

MetaObjectSystem Hyötyjä Signal ja slot mekanismi Dynamic properties qobject_cast operaatio Lisäksi (QObject) -oliolta voi kysyä tietoja

MetaObjectSystem Järjestelmä perustuu QObject-luokka Q_OBJECT-makro moc kääntäjä (Meta object compiler)

MetaObjectSystem-esimerkki class example_class : public QObject { Q_OBJECT }; public: signals: void some_signal(int index); public slots: void clicked();

Signal-slot -mekanismi Yhdistämislauseen syntaksi muotoa: connect(sender, SIGNAL(signal), receiver, SLOT(slot)); sender ja receiver QObject osoittimia signal ja slot funktioiden prototyyppejä ilman parametrien nimiä (function signatures) Signaalin ja slot:in parametrien tulee olla samat. Jos signaalilla enemmän parametreja kuin slot:lla niitä ei käytetä.

Signal-slot -mekanismi Yksi signaali voidaan yhdistää moneen slot:iin. Tällöin slot:ien kutsuntajärjestys on määrittelemätön. Monta signaalia voidaan yhdistää samaan slot:iin. Mikä vain niistä laukaisee slot:n. Signaali voidaan yhdistää toiseen signaaliin. Yhteydet voidaan myös purkaa disconnectfunktiolla.

Signal-slot -mekanismi Signaaleita ja slotteja voidaan käyttää myös muissa kuin käyttöliittymän luokissa (kunhan periytyvät QObject:sta ja Q_OBJECT-makro on lisätty luokan toteutukseen). Signaaleita voidaan kytkeä eri tavoin antamalla kytkentätapa connect:n parametrinä. Kytkentätavoista rinnakkaisuusluennolla. Qt 5 tarjoaa uuden syntaksin signaalien kytkemiseen käyttäen osoittimia: QObject::connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue);

Dynamic cast Toimii kuin C++:n dynamic_cast operaatio - ei tarvitse C++:n RTTI (run-time type information) tukea kuten dynamic_cast. - toimii kaikille QObject:sta perityille luokille. QObject *obj = new MyWidget(); QWidget *widget = qobject_cast<qwidget*>(obj);

Dynamic properties Propertyjä voidaan asettaa ja lukea käyttäen QObject:n geneerisiä setproperty() ja property() funktioita. Funktioita käyttäen ei tarvitse tietää olion aliluokkaa. MetaObjectSystem mahdollistaa propertyjen lisäämisen myös ohjelman ajon aikana (dynamic properties).

Qt Luokkakirjaston moduulit Oletuksena projektiin mukaan liitetään moduuleista QtCore ja QtGui Muut lisättävä projektitiedostoon erikseen QT += moduuli esim. QT += network

Qt Luokkakirjaston moduulit Core Module GUI Module Network Module Qt Script QtSQL QtXML QtWebKit Jne. http://qt-project.org/doc/qt-5.1/qtdoc/qtmodules.html

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 Tyylit (Styles) QWidget QButton QPen QClipboard QDialog QImage QResizeEvent

Qt käyttöliittymän muistinhallinta Kun QObject:i luodaan se lisätään parentolion lapseksi. Kun parent-olio tuhotaan (delete), se tuhoaa lapsiolionsa, jotka vastaavasti tuhoavat omat lapsiolionsa. Näin pääikkunan sulkeminen vapauttaa kaiken käyttöliittymälle varatun muistin.

Parent suhteet esimerkki Rakentaja: QWidget(QWidget* pparent = 0); QWindow* pwindow = new QWindow(); QPushButton pbutton = new QPushButton(pWindow);

QPointer Turvallinen osoitin Osoitin nollataan automaattisesti kun osoitettu objekti tuhotaan. Käytetään kuin normaalia osoitinta. Osoitettu objekti tulee olla periytetty QObject-luokasta ja määritelty Q_OBJECT makrolla. QPointer<QLabel> plabel = new QLabel(); QPointer<QLabel> plabel2 = plabel; plabel->settext( otsikko ); delete plabel; // myös plabel2 nollautuu.

Debug-tulosteet qdebug() qdebug() << Tämä on debug tuloste ; Objektin tilan tulostaminen QObject obj; obj.dumpobjectinfo(); obj.dumpobjecttree();