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