Tämä kurssi on jo päättynyt.

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-konfiguraatio
  • EX4:
    • 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.

Palautusta lähetetään...