...
- Suunnittele
...
- luokkamalli
...
- koneelle.
...
- Luokka
...
- Kone
...
- koostuu
...
- luokista
...
- Toimilaite
...
- ja
...
- Prosessi.
...
- Toimilaite
...
- koostaa
...
- luokan
...
- Liikeanturi
...
- ja
...
- VoimaAnturi.
...
- Nämä
...
- luokat
...
- taas
...
- perivät
...
- luokan
...
- Anturi.
...
- Tee
...
- luokista
...
- ensin
...
- UML-
...
- malli Dia:lla
...
- ja
...
- sitten
...
- Qt:llä.
...
- Muokkaa
...
- mallia
...
- siten,
...
- että
...
- teet
...
- luokan
...
- dialogi
...
- ja
...
- laitat
...
- sen
...
- jäseneksi
...
- luokan
...
- Kone.
...
- Periytä
...
- Kone
...
- luokasta
...
- QThread.
...
- Korjaa Dialla tekemä malli edellisen tehtävän mukaiseksi.
Wiki Markup Lisää anturille jäsenet double vahvistus, double offset, double tulo, double tuloSiYksikkona, double taarattuTuloSiYksikkona, double KeskiarvoistusVektori\[10\], i , int paikkaVektorissa, double Summa
...
- Tee
...
- käyttöliittymään
...
- nappi
...
- MittaaTulo ja sille Dialog luokkaan slot Mittaa. Laita myös LineEdit tai lcd, josta voit lukea mitatun arvon.
- Tee Dialog luokkaan signaali MittaaTulonArvo.
- Tee luokkaan Anturi slot void PaivitaTulo();
- Yhdistä signaali MittaaTulonArvo slotiin PaivitaTulo.
- Emitoi (lähetä) signaali MittaaTulonArvo käyttöliittymän slotissa Mittaa.
- Tee luokkaan Anturi signaali LahetaMitattuArvo(double) ja ota se vastaan käyttöliittymässä.
ui
Dialog
Anturi
MittaaTulo->
->Mittaa
MittaaTulonArvo->
->PaivitaTulo
ArvonNaytto<-
<- LahetaMitattuArvo(double)
- Laita jokin arvo emitoimaasi signaaliin LahetaMitattuArvo(double) ja testaa, että arvo tulee näytölle.
- Tee käyttöliittymään Horizontal Slider ja välitä se signaali - slot mekanismilla Anturi- luokan muuttujaan tulo.
- Tee Anturi-luokkaan funktio Paivita. Kutsu tätä edellisessä tehtävässä tekemästäsi slotista.
- Laita Paivita - funktion sisällöksi tuloSiYksikkona=tulo*vahvistu+offset;
...
- Testaa,
...
- että
...
- vahvistettu
...
- tulo
...
- tulee
...
- näytölle.
...
- Tee Umbrello -ohjelmalla
...
- UML-malli
...
- tähän
...
- asti
...
- tekemästäsi
...
- softasta.
...
- Tässä
...
- tehtävässä
...
- toteutamme
...
- asynkronisen
...
- säikeen,
...
- joka
...
- lukee
...
- anturia
...
- ja
...
- lähettää
...
- signaalilla
...
- tiedon
...
- käyttöliittymälle.
...
- Tee
...
- Kone
...
- luokkaan
...
- run-funktio
...
- ja siihen forever toistorakenne.
...
- Katso
...
- mallia
...
...
...
Code Block //tämä luokan esittelyyn QTime displayUpdateTimer;
...
Code Block
...
...
forever { //Tähän anturin tiedon laskenta if (NayttoAjastin.elapsed() > Paivitysaika) { Nayttoajastin.restart(); emit LahetaAnturinTiedot(Arvo); } }
...
- Tee esimerkki Qwt plot esimerkki.
- Hyödynnä esimerkkiä ja tulosta anturin arvo qwtplotissa.
- Päivitä edellisiä tehtäviä kuvaava Umbrello malli.
- Tee kone esimerkki siten, että teet kaikista luokista dialogeja. Laita luokkiin toimilaite ja anturi liukupalkit, joilla voit säätää niiden antamia arvoja. Älä käytä enää QThread luokkaa kone luokan perinnässä.
- Tee dialog perustainen ohjelma ja koosta se kahdesta alidialogista. Kokeile dialogien avausta show ja exec funktioilla, mitä huomaat? Ohjeita: sisällytä "include" alidialogit päädialogin otsikkotiedostoon, tee dialogeille muuttujat päädialogiin, tee päädialogiin nappi, jolla avaat alidialogit funktioilla exec tai show.
- Lisää edellisen tehtävän dilogeihin viestinvälitystä. Lähetä viesti päädialogista molempiin alidialogeihin. Esimerkiksi niin, että teet dialogiin napin, joka lähettää editline viestin molemmille alidialogeille.
- Lisää alidialogeihin viestinvälitys toiseen alidialogiin edellisessä tehtävässä kuvatulla tavalla.
- Lisää vielä alidialogeihin vistinvälitys päädialogiin.
- Tutustu Kvaserin simplewrite.c ohjelmaan ja liitä se Qt- dialogiin siten, että voit syöttää ohjelman tiedot dialogista.
- Tutustu Kvaserin canmonitor.c ohjelmaan ja liitä se Qt- dialogiin siten, että voit syöttää ohjelman tiedot dialogista.
- Tee ohjaus manipulaattorille, joka nostaa laatikon pöydältä ja laittaa sen toiselle pöydälle. Käytä QStateMachine luokkaa ja sen aliluokkia.
- Tee edellinen tehtävä käyttäen switch-case rakennetta ja QTimer ajastinta. Kts. Qt:n wiki.
- Tee edellinen tehtävä käyttäen tilakoneessa omaa Säiettä QThread.