Simppeli QTimer esimerkki
Tee Esimerkki, jossa on tehty Dialog perustainen sovellus ja liitä siihen Dial objekti, tee alla kuvatut muutokset Dialog.cpp ja .h tiedostoihinliitetty siihen QTimer muuttuja. QTimer on kohtuullisen helposti käytettävä ajastin. Esimerkiksi timer.start(1000); komennolla ajatimen saa käyntiin ja timer.stop(); komennolla se pysähtyy.
Code Block |
---|
#include "dialog.h" #include "ui_dialog.h" //dialogin muodostin eli funktio, joka "ajetaan" ohjelman käynnistyessä //tänne on hyvä laittaa kaikki muuttujien alustukset, koska muuten ne saavat mielivaltaisia arvoja ja ohjelma ei käynnisty Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); //liitetään ajastimen timeout timerslotiin =update new QTimer(this);//luo uusi ajastineli aina kun ajastin on käynyt loppuun se lähettää timeout signaalin ja alkaa laskea taas alusta //liitä ajastimen timeout slotiin update nyt update() slotia kutsutaan aina kun tapahtuu timeout connect(&timer, SIGNAL(timeout()), this, SLOT(update())); //startin voisi tietysti laittaa esimerkiksi napuin taakse, jolloin ajatin ei "pyörisi" kuin haluttaessa timer->start.start(1000);//käynnistäkäynnisetään ajastin, timeoutjoka lähettää timeoutin sekunnin välein Arvo=0;//nollataan muuttuja, jokajohon viedäänlasketaan dialtimeoutien objektillelukumäärää } Dialog::~Dialog() { delete ui; } ****************** void Dialog::update()//slot joka laukeaa ajastimen timeoutistatätä kutsutaan aina kun tapahtuu timeout eli kun startissa määrätty aika millisekunteja on kulunut { Arvo++; ui->dial>editLine->setValue(Arvo); } |
Otsikkotiedosto syntyy automaattisesti ohjelman luonnin yhteydessä (Wizard tekee). Tänne joudutaan lisäämään tarvittavat muuttujat. Tässä tapauksessa tarvitaan ajastin eli voitaisiin tehdä vaikka QTimer omaAjastin. Lisäksi tarvitaan muuttuja laskemaan ajastimen timeoutteja, kuten alla on tehty
Code Block |
---|
#ifndef DIALOG_H #define DIALOG_H #include <QtGui/QDialog> #include <QTimer> //tämä pitää olla mukana, jotta ajastinta voidaan käyttää namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); ~Dialog(); private slots: void update(); private: Ui::Dialog *ui; QTimer *timer;//osoitinajastimen esittely ajastimeenjäsenmuuttujana int Arvo; }; #endif // DIALOG_H |