- TIE-0240x
- 6. Dynaaminen sitominen ja olioiden omistus
- 6.8 Harjoitus (PAKOLLINEN): Periytyminen ja Qt
Harjoitus (PAKOLLINEN): Periytyminen ja Qt¶
Tällä viikolla kerrataan Qt:n käyttöä. Lisäksi tutustutaan ohjelman osana peritymisen käyttöön sekä Qt:n että polymorfismin näkökulmasta.
Harjoituksen pakollisena osana teet kohdan Aloitusdialogin lisääminen. Palautus tehdään versionhallinnan avulla. Muista tehdä commit riittävän usein!
Tehtävän vaatimat tiedostot saat nyhtämällä versionhallinnasta. Ne sijaitsevat repositoriossa ``student_template_project` https://course-gitlab.tuni.fi/tie-0240x-ohjelmointi-3-programming-3-2020-2021/student_template_project. Se tulee laittaa paikalliseen repositorioosi remoteksi. Tässä harjoituksessa tarvitsemasi koodit ovat hakemistossa EX4. Huomaa, sinulla ei ole oikeuksia päivittää repositoriota. Huom! Tämä tarvitsee tehdä vain kerran.
.gitlab-ci.yml
: koko repositorion juuressa. yaml-tiedosto, jossa CI/CD-konfiguraatioEX4
:Inheritance
:Inheritance.pro
constants.hh, fastball.hh, fastball.cc, main.cc, mainwindow.cc, movingobject.cc, movingobject.hh, movingobjectgraphics.cc, movingobjectgraphics.hh, objectcontroller.cc, objectcontroller.hh
Aloitusdialogin lisääminen¶
Lisää ohjelmaan aloitusikkuna, joka kysyy käynnistettäessä käyttäjältä ohjelman toiminnan kannalta tarpeellista tietoa. Kerää ainakin ruudulle piirrettävien objektien määrä. Saat uuden ikkunan klikkaamalla projektia Qt:ssa hiiren oikealla napilla Add new->Qt->Qt Designer Form Class
.
Qt loi sinulle uudet .h, .cpp ja .ui -tiedostot.
Tee dialogi valmiiksi. Tee siihen nappulat ohjelman lopettamiselle ja aloittamiselle sekä tarvittavat kentät haluamasi tiedon keräämiseen. Kytke nappuloiden klikkaussignaalit slotteihin reject()
ja accept()
. Dialogin ja sen signaalien dokumentaatioon voit tutustua täällä .
Kirjoita pääohjelmaan koodi, joka näyttää dialogin. Tätä varten tutustu Qt:n dokumentaatiossa kohtaan exec()
. Voit kirjoittaa dialogillesi exec()
-funktiolle myös uuden toteutuksen.
Välittääksesi tietoa dialogista pääikkunalle, tarvitset signaalin. Viestinnän voit näin ollen tehdä signaalien ja slotien avulla eli dialogi signaloi pääohjelmalle käyttäjän syöttämän arvon eli ainakin ruudulle piirrettävien objektien määrän. Tätä varten sinun siis kannattaa tehdä dialogille oma signaali, jonka parametrina käyttäjän arvo on.
Dialogi-ikkunasi signaalin lähettämistä varten sinun tulee siis toteuttaa dialogillesi oma signaali signals
rajapintaan ja emitoida se sopivassa kohtaa koodia.
MainWindown koodiin sinun tarvitsee lisätä koodi dialogin luomiseksi sekä kytkeä signaalisi spawnObjectcts()
slotiin.
Polymorfismin käyttö¶
Ohjelmassa on abstrakti kantaluokka MovingObject
. Siitä on periytetty yksi luokka FastBall
jossa annetaan toteutus funktiolle virtual void move() = 0
. Toteuta oma luokkasi OddBall
jonka liikkumistavan voit valita itse. Luokka tulee luoda periyttämällä MovingObjectista
. Saat luokkasi mukaan ohjelmaan lisäämällä spawnObjects()
signaaliin käsittelyn myös tyypin ObjectType::ODDBALL
joka rekisteröi myös uudet oliosi osaksi ohjelmaa.
Palautus¶
Työ palautetaan tagaamalla. Tagin pitää alkaa EX4_submission.
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.