(H) Kokonaisarvosana

Tavoite: Opin tekemään yksinkertaisen dialogin Qt Designerilla ja ymmärtämään Qt:n signals & slots -mekanismia. Harjoittelen myös modulaarisuutta tekemällä valmiille ohjelmalle graafisen käyttöliittymän.

Ohjeita: Ohjelman pohjakoodina on toimiva ohjelma, ja voit kokeilla sen käyttöä. Varo kuitenkin aiheuttamasta muutoksia templates-hakemistoon.

Pohjakoodi löytyy hakemistosta templates/11/grading, mutta tarvitset sieltä vain tiedostot gradecalculator.hh ja gradecalculator.cpp. Mukana on myös tiedosto main.cpp, mutta GUI-ohjelmissa käytetään Qt:n generoimaa samannimistä (mutta erisisältöistä) tiedostoa.

Luo uusi Qt-projekti: student/11/grading_gui/ (huomaa eri nimi kuin pohjakoodilla). Tällöin Qt generoi luokan MainWindow (tiedostot mainwindow.hh, mainwindow.cpp ja mainwindow.ui). Lisää tähän Qt-projektiin uusi luokka (moduuli) GradeCalculator, mutta korvaa Qt:n generoima tiedosto gradecalculator.hh pohjakoodin samannimisellä tiedostolla, ja toimi samoin tiedoston gradecalculator.cpp kanssa. Älä muuta GradeCalculator-moduulin annettua koodia, vaan tee kaikki tarvittavat muutokset luokkaan MainWindow.

Tehtävänä on toteuttaa Qt Designerilla alla olevan kuvan mukainen dialogi.

Käyttöliittymä ennen syötteiden antamista

Kun käyttäjä on antanut haluamansa pisteet ja tenttiarvosanan ja klikannut Calculate-nappulaa, ohjelma tulostaa textBrowser-widgettiin viikkoharjoitusten tulospisteen (W-Score), projektien tulospisteen (P-Score) ja kokonaisarvosanan. Lopputulos on siis esimerkiksi alla olevan kuvan mukainen.

Käyttöliittymä syötteineen ja tulosteineen

Voit tulostaa tekstejä eri riveille käyttämällä merkkijonossa merkkiä '\n'. Esimerkiksi merkkijono "ab\ncd" tulostuu näin:

ab
cd

Pohjakoodin tiedostossa main.cpp on tarkistettu, ovatko käyttäjän antamat luvut hyväksyttäviä. Huomaa, että tällaisia tarkistukset saadaan GUI-ohjelmaan antamalla valintalaatikoille (spin box) mahdollisten arvojen rajat (metodilla setRange).

Ohje automaattitestien läpäisemiseksi

Käytä seuraavia objektinimiä spinBox-widgeteille: spinBoxN, spinBoxG, spinBoxP ja spinBoxE. Käytä näille widgeteille signaalia valueChanged(int). Käytä nappulalle nimeä calculatePushButton. Käytä textBrowser-widgetille, johon kokonaisarvosana tulostetaan, nimeä textBrowser.

Samaan tapaan kuin Painoindeksi-tehtävässä, käytä signal & slot -mekanismia kytkemään widgeteille sopivat toiminnot.

Vinkkejä tehtävän tekemiseen:

  • Aloita yllä kerrotuista ohjeista. Tämän jälkeen voit jatkaa rakentamalla käyttöliittymän.

  • Muutenkin voit tehdä tehtävän vastaavanlaisissa vaiheissa kuin Painoindeksi-tehtävän.

  • Kokonaisluvun tulostaminen ei onnistu suoraan, vaan joudut todennäköisesti muuttamaan arvon QString-tyyppisiksi Sen voi tehdä näin:

    int x = 0;
    QString s = QString::number(x);
    

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.