#include "mainwindow.h" #include<QTimer> #include<QPainter> #include<QTime> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{ QTimer *timer=new QTimer(this); connect(timer, &QTimer::timeout, this, QOverload<>::of(&MainWindow::update)); timer->start(1000); setWindowTitle("Clock"); resize(200,200); }
MainWindow::~MainWindow() {
}
void MainWindow::paintEvent(QPaintEvent *event) { static const QPoint hourHand[4] = { QPoint(5, 14), QPoint(-5, 14), QPoint(-4, -61), QPoint(4, -61) }; static const QPoint minuteHand[4] = { QPoint(4, 14), QPoint(-4, 14), QPoint(-3, -79), QPoint(3, -79) };
static const QPoint secondHand[4] = { QPoint(1, 14), QPoint(-1, 14), QPoint(-1, -89), QPoint(1, -89) }; const QColor hourColor(Qt::black); const QColor minuteColor(Qt::blue); const QColor secondColor(Qt::red);
int side = qMin(width(), height()); QPainter painter(this); QTime time=QTime::currentTime(); QDate date = QDate::currentDate();
painter.setRenderHint(QPainter::Antialiasing); painter.translate(width()/2,height()/2); painter.scale(side/200,side/200); painter.setBrush(hourColor); painter.setPen(Qt::NoPen);
painter.save(); painter.setPen(Qt::blue); painter.setFont(QFont("Arial", 10)); painter.drawText(QRect(-side/2,side/2-290,side,290),Qt::AlignCenter,tr("Njupt")); painter.restore(); painter.save(); painter.setPen(Qt::black); painter.setFont(QFont("Arial", 10)); painter.drawText(QRect(-side/2, side/2 - 100, side, 100), Qt::AlignCenter, date.toString("yyyy-MM-dd")); painter.restore();
painter.save(); painter.rotate(30*(time.hour()+time.minute()/60)); painter.drawConvexPolygon(hourHand, 4); for (int i = 0; i < 60; i++) { if (i % 5 == 0) { painter.drawRect(85, -2, 10, 4); } else { painter.drawRect(90, -1, 5, 2); } painter.rotate(6); } painter.restore();
painter.save(); painter.setBrush(minuteColor);
painter.rotate(6*(time.minute()+time.second()/60)); painter.drawConvexPolygon(minuteHand, 4); painter.restore();
painter.save(); painter.setBrush(secondColor); painter.rotate(6*time.second()); painter.drawConvexPolygon(secondHand, 4); painter.drawEllipse(-5, -68, 10, 10); painter.drawEllipse(-5, -6, 10, 10); painter.restore();
}
|