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 }
ΠΠ»Π°ΡΡ OvenTimer Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ QWidget ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΄Π²Π΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ: paintEvent() ΠΈ mousePressEvent().
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 }
Π ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° QTimer: updateTimer ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ Π²ΠΈΠ΄Π° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΡΠ΅ΡΠ΅Π· ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ΅ΠΊΡΠ½Π΄Ρ, a finishTimer Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΈΠ³Π½Π°Π» Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° timeout() ΠΏΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΎΡΠΌΠ΅ΡΠΊΠΈ 0. ΠΠ±ΡΠ΅ΠΊΡ finishTimer Π΄ΠΎΠ»ΠΆΠ΅Π½ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠ³Π½Π°Π» ΡΠ°ΠΉΠΌ-Π°ΡΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ setSingleShot(true); ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΈΠ»ΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½Ρ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π²ΡΠ·ΠΎΠ² connect() ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΡΠΌ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΠΊΠΎΠ³Π΄Π° ΡΠ°ΠΉΠΌΠ΅Ρ Π½Π΅Π°ΠΊΡΠΈΠ²Π΅Π½.
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 }
Π€ΡΠ½ΠΊΡΠΈΡ setDuration() Π²ΡΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°ΠΉΠΌΠ΅Ρ Π΄ΡΡ ΠΎΠ²ΠΊΠΈ, Π·Π°Π΄Π°Π²Π°Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄. ΠΡΠ΅ΠΌΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΌΡ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΡΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΌΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ QDateTime::currentDateTime(), ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π΅Π³ΠΎ Π² Π·Π°ΠΊΡΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ finishTime. B ΠΊΠΎΠ½ΡΠ΅ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ update() Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Ρ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΡΠ°Π±ΠΎΡΡ.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ finishTime ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ QDateTime. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π°ΡΡ ΠΈ Π²ΡΠ΅ΠΌΡ, ΠΌΡ ΠΈΠ·Π±Π΅Π³Π°Π΅ΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈΠ·-Π·Π° ΡΠΌΠ΅Π½Ρ ΡΡΡΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΠΊΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΠΏΠΎΠ»ΡΠ½ΠΎΡΠΈ, Π° Π²ΡΠ΅ΠΌΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ β ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΠ½ΠΎΡΠΈ.
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 }
Π€ΡΠ½ΠΊΡΠΈΡ duration() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΠΊΡΠ½Π΄, ΠΎΡΡΠ°Π²ΡΠ΅Π΅ΡΡ Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°. ΠΡΠ»ΠΈ ΡΠ°ΠΉΠΌΠ΅Ρ Π½Π΅Π°ΠΊΡΠΈΠ²Π΅Π½, ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ 0.
01 void OvenTimer::mousePressEvent(QMouseEvent *event)
02 {
03 QPointF point = event->pos() - rect().center();
04 double theta = atan2(-point.x(), -point.y()) * 180 / 3.14159265359;
05 setDuration(duration() + int(theta / DegreesPerSecond));
06 update();
07 }
ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π»ΠΊΠ°Π΅Ρ ΠΏΠΎ ΡΡΠΎΠΌΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ, ΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ Π±Π»ΠΈΠΆΠ°ΠΉΡΡΡ ΠΌΠ΅ΡΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠ½ΠΊΡΡ, Π½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΎΡΠΌΡΠ»Ρ, Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈΠ΄Π΅Ρ Π½Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΠ°. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ΅ΡΠΊΠ°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅Π»ΠΊΠ½ΡΠ» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠ΅ΠΏΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ ΡΠ²Π΅ΡΡ Ρ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ° ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0.
01 void OvenTimer::paintEvent(QPaintEvent * /* event */)
02 {
03 QPainter painter(this);
04 painter.setRenderHint(QPainter::Antialiasing, true);
05 int side = qMin(width(), height());
06 painter.setViewport((width() - side) / 2, (height() - side) / 2,
07 side, side);
08 painter.setWindow(-50, -50, 100, 100);
09 draw(&painter);
10 }
B paintEvent() ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π²Π½ΡΡΡΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°, ΠΈ ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Π½Π° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ (β50, β50, 100, 100), ΡΠΎ Π΅ΡΡΡ Π½Π° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ 100 Γ 100, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΡΡΠ²Π°Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΡΠΎΡΠΊΠΈ (β50, β50) Π΄ΠΎ ΡΠΎΡΠΊΠΈ (+50, +50). Π¨Π°Π±Π»ΠΎΠ½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ qMin Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅ ΠΈΠ· Π΄Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ draw() Π΄Π»Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΡΡΠ½ΠΊΠ° Π½Π° ΡΠΊΡΠ°Π½.
Π ΠΈΡ. 8.10. ΠΠΈΠ΄ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° OvenTimer ΠΏΡΠΈ ΡΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°Ρ .
ΠΡΠ»ΠΈ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ»Π° Π±Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠΌ, ΡΠ°ΠΉΠΌΠ΅Ρ Π΄ΡΡ ΠΎΠ²ΠΊΠΈ ΠΏΡΠΈΠ½ΡΠ» Π±Ρ ΡΠΎΡΠΌΡ ΡΠ»Π»ΠΈΠΏΡΠ°, ΠΊΠΎΠ³Π΄Π° ΡΠΎΡΠΌΠ° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½Π΅Ρ Π±ΡΡΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ². Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ°ΠΊΠΎΠΉ Π΄Π΅ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΎΠΊΠ½ΠΎ Π½Π° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΡΠΎΠ½.
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
01 void OvenTimer::draw(QPainter *painter)
02 {
03 static const int triangle[3][2] = {
04 { -2, -49 }, { +2, -49 }, { 0, -47 }
05 };
10 QPen thickPen(palette().foreground(), 1.5);
11 QPen thinPen(palette().foreground(), 0.5);
12 QColor niceBlue(150, 150, 200);
13 painter->setPen(thinPen);
14 painter->setBrush(palette().foreground());
15 painter->drawPolygon(QPolygon(3, &triangle[0][0]));
ΠΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠ³ΠΎ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 0 Π² Π²Π΅ΡΡ Π½Π΅ΠΉ ΡΠ°ΡΡΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°. ΠΡΠΎΡ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Π·Π°Π΄Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΡΠ΅ΠΌΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ, ΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ drawPolygon() Π΄Π»Ρ Π΅Π³ΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ.
ΠΠ΄Π½ΠΎ ΠΈΠ· ΡΠ΄ΠΎΠ±ΡΡΠ² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Β«ΠΎΠΊΠ½ΠΎβΠΎΠ±Π»Π°ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΒ» Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠ΅ΠΊ ΠΈ ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΄ΠΎΠ±ΠΈΠ²Π°ΡΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ².
16 QConicalGradient coneGradient(0, 0, -90.0);
17 coneGradient.setColorAt(0.0, Qt::darkGray);
18 coneGradient.setColorAt(0.2, niceBlue);
19 coneGradient.setColorAt(0.5, Qt::white);
20 coneGradient.setColorAt(1.0, Qt::darkGray);
21 painter->setBrush(coneGradient);
22 painter->drawEllipse(-46, -46, 92, 92);
ΠΡ ΡΠΈΡΡΠ΅ΠΌ Π²Π½Π΅ΡΠ½ΡΡ ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΡ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π΅Π΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ. Π¦Π΅Π½ΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΠΊΠ΅ (0, 0), Π° Π΅Π³ΠΎ ΡΠ³ΠΎΠ» ΡΠ°Π²Π΅Π½ β90Β°.
23 QRadialGradient haloGradient(0, 0, 20, 0, 0);
24 haloGradient.setColorAt(0.0, Qt::lightGray);
25 haloGradient.setColorAt(0.8, Qt::darkGray);
26 haloGradient.setColorAt(0.9, Qt::white);
27 haloGradient.setColorAt(1.0, Qt::black);
28 painter->setPen(Qt::NoPen);
29 painter->setBrush(haloGradient);
30 painter->drawEllipse(-20, -20, 40, 40);
ΠΡ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°Π΄ΠΈΠ°Π»ΡΠ½ΡΠΉ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ. Π¦Π΅Π½ΡΡ ΠΈ ΡΠΎΠΊΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² ΡΠΎΡΠΊΠ΅ (0, 0). Π Π°Π΄ΠΈΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° ΡΠ°Π²Π΅Π½ 20.
31 QLinearGradient knobGradient(-7, -25, 7, -25);
32 knobGradient.setColorAt(0.0, Qt::black);
33 knobGradient.setColorAt(0.2, niceBlue);
34 knobGradient.setColorAt(0.3, Qt::lightGray);
35 knobGradient.setColorAt(0.8, Qt::white);
36 knobGradient.setColorAt(1.0, Qt::black);
37 painter->rotate(duration() * DegreesPerSecond);
38 painter->setBrush(knobGradient);
39 painter->setPen(thinPen);
40 painter->drawRoundRect(-7, -25, 14, 50, 150, 50);
41 for (int i = 0; i <= MaxMinutes; ++i) {
42 if (i % 5 == 0) {
43 painter->setPen(thickPen);
44 painter->drawLine(0, -41, 0, -44);
45 painter->drawText(-15, -41, 30, 25,
46 Qt::AlignHCenter | Qt::AlignTop,
47 QString::number(i));
48 } else {
49 painter->setPen(thinPen);
50 painter->drawLine(0, -42, 0, -44);
51 }
52 painter->rotate(-DegreesPerMinute);
53 }
54 }
ΠΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ rotate() Π΄Π»Ρ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΡΠΈΡΠΎΠ²Π°Π»ΡΡΠΈΠΊΠ°. Π ΡΡΠ°ΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ Π½ΡΠ»Π΅Π²Π°Ρ ΠΎΡΠΌΠ΅ΡΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΠ»Π°ΡΡ ΡΠ²Π΅ΡΡ Ρ; ΡΠ΅ΠΏΠ΅ΡΡ Π½ΡΠ»Π΅Π²Π°Ρ ΠΎΡΠΌΠ΅ΡΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΡΠ°Π΅ΡΡΡ Π΄ΠΎ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°. ΠΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΠΌΡ ΡΠ½ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌ ΡΡΡΠΊΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΅Π³ΠΎ ΠΎΡΠΈΠ΅Π½ΡΠ°ΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ³Π»Π° ΠΏΠΎΠ²ΠΎΡΠΎΡΠ°.
Π ΡΠΈΠΊΠ»Π΅ for ΠΌΡ ΡΠΈΡΡΠ΅ΠΌ ΠΌΠΈΠ½ΡΡΠ½ΡΠ΅ ΠΎΡΠΌΠ΅ΡΠΊΠΈ ΠΏΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠΈΠ½ΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΠ°ΠΆΠ΄ΡΠ΅ 5 ΠΌΠΈΠ½ΡΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠΊ. Π’Π΅ΠΊΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ΅ ΠΏΠΎΠ΄ ΠΌΠΈΠ½ΡΡΠ½ΠΎΠΉ ΠΎΡΠΌΠ΅ΡΠΊΠΎΠΉ. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΈΠΊΠ»Π° ΠΌΡ ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΠΈΡΠΎΠ²Π°Π»ΡΡΠΈΠΊ ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅ Π½Π° 7Β°, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠΈΠ½ΡΡΠ΅. ΠΡΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΈΠ½ΡΡΠ½ΠΎΠΉ ΠΎΡΠΌΠ΅ΡΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π· ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΠΈ, Ρ ΠΎΡΡ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌ drawLine() ΠΈ drawText().