01 class OvenTimer : public QWidget
02 {
03 Q_OBJECT
04 public:
05 OvenTimer(QWidget *parent = 0);
06 void setDuration(int secs);
07 int duration const;
08 void draw(QPainter *painter);
09 signals:
10 void timeout;
11 protected:
12 void paintEvent(QPaintEvent *event);
13 void mousePressEvent(QMouseEvent *event);
14 private:
15 QDateTime finishTime;
16 QTimer *updateTimer;
17 QTimer *finishTimer;
18 }
Класс
const double DegreesPerMinute = 7.0;
const double DegreesPerSecond = DegreesPerMinute / 60;
const int MaxMinutes = 45;
const int MaxSeconds = MaxMinutes * 60;
const int UpdateInterval = 1;
Мы начнем с нескольких констант, управляющих внешним видом и режимом работы таймера духовки.
01 OvenTimer::OvenTimer(QWidget *parent)
02 : QWidget(parent)
03 {
04 finishTime = QDateTime::currentDateTime;
05 updateTimer = new QTimer(this);
06 connect(updateTimer, SIGNAL(timeouf),
07 this, SLOT(update));
08 finishTimer = new QTimer(this);
09 finishTimer->setSingleShot(true);
10 connect(finishTimer, SIGNAL(timeout),
11 this, SIGNAL(timeout));
12 connect(finishTimer, SIGNAL(timeout),
13 updateTimer, SLOT(stop));
14 }
В конструкторе мы создаем два объекта
01 void OvenTimer::setDuration(int secs)
02 {
03 if (secs > MaxSeconds) {
04 secs = MaxSeconds;
05 } else if (secs <= 0) {
06 secs = 0;
07 }
08 finishTime = QDateTime::currentDateTime.addSecs(secs);
09 if (secs > 0) {
10 updateTimer->start(UpdateInterval * 1000);
11 finishTimer->start(secs * 1000);
12 } else {
13 updateTimer->stop;
14 finishTimer->stop;
15 }
16 update;
17 }
Функция
Переменная
01 int OvenTimer::duration const
02 {
03 int secs = QDateTime::currentDateTime.
04 secsTo(finishTime);
05 if (secs < 0)
06 secs = 0;
07 return secs;
08 }