#include "clock.h" #include #include #include #include #include Clock::Clock(QWidget *parent) : QWidget(parent) { ticking = true; background.load(":/images/clock/numbers.png"); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(checkUpdate())); timer->start(33); } void Clock::checkUpdate() { if (ticking) { QTime cur = QTime::currentTime(); if (cur.second() != last.second()) { last = cur; update(); } } else update(); } void Clock::paintEvent(QPaintEvent */*event*/) { QTime time = QTime::currentTime(); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.drawImage(0, 0, background); painter.translate(width() / 2, height() / 2); int side = qMin(width(), height()); painter.scale(side / 356.0, side / 355.0); QPen hourHand(Qt::white, 11, Qt::SolidLine, Qt::RoundCap); QPen hourArm(Qt::white, 4); QPen minHand(hourHand); QPen minArm(hourArm); QPen secHand(Qt::red, 3); QPen capPen(Qt::white, 4); QBrush capBrush(Qt::black, Qt::SolidPattern); // Needles qreal sec = time.second() + time.msec() / 1000.0; if (ticking) sec = time.second(); qreal min = time.minute() + sec / 60.0; qreal hour = time.hour() + min / 60.0; // Sec painter.save(); painter.rotate(6.0 * sec); painter.setPen(secHand); painter.drawLine(0, 28, 0, -155); painter.restore(); // Min painter.save(); painter.rotate(6.0 * min); painter.setPen(minArm); painter.drawLine(0, 0, 0, -30); painter.setPen(minHand); painter.drawLine(0, -27, 0, -125); painter.restore(); // Hour painter.save(); painter.rotate(30.0 * hour); painter.setPen(hourArm); painter.drawLine(0, 0, 0, -30); painter.setPen(hourHand); painter.drawLine(0, -27, 0, -80); painter.restore(); // Cap painter.setPen(capPen); painter.setBrush(capBrush); painter.drawEllipse(-8, -8, 16, 16); }