Qt绘图习题-Clock
Qt绘图练习-Clock

Clock.h
#ifndef CLOCK_H #define CLOCK_H #include <QWidget> #include <QPoint> #include <QTimer> class Clock:public QWidget { Q_OBJECT public: /** Default constructor */ Clock(QWidget *parent = 0); /** Default destructor */ virtual ~Clock(); protected: void paintEvent(QPaintEvent *event); private: QTimer *timer; }; #endif // CLOCK_H
Clock.cpp
#include "Clock.h" #include <QPainter> #include <QTime> QPoint sec[4] = {QPoint(0, 10), QPoint(3, 0), QPoint(0, -90), QPoint(-3, 0)}; QPoint min[4] = {QPoint(0, 8), QPoint(5, 0), QPoint(0, -70), QPoint(-5, 0)}; QPoint hour[4] = {QPoint(0, 6), QPoint(7, 0), QPoint(0, -50), QPoint(-7, 0)}; Clock::Clock(QWidget *parent):QWidget(parent) { //ctor resize(200, 200); timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(update())); timer->start(1000); } Clock::~Clock() { //dtor } void Clock::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); //painter.translate(100, 100); painter.setWindow(-100, -100, 200, 200); //绘制大刻度 for (int i = 0; i < 60 ; ++i) { painter.rotate(6); if (i % 5 == 4) { painter.setPen(QPen(Qt::black, 5)); painter.drawLine(0, -90, 0, -100); } else { painter.setPen(QPen(Qt::black, 1)); painter.drawLine(0, -95, 0, -100); } } int s = QTime::currentTime().second(); int m = QTime::currentTime().minute(); int h = QTime::currentTime().hour(); painter.rotate(((h % 12) + static_cast<double>(m / 60.0)) * 30); painter.setBrush(Qt::blue); painter.setPen(Qt::blue); painter.drawConvexPolygon(hour, 4); painter.restore(); painter.rotate(m * 6); painter.setBrush(Qt::green); painter.setPen(Qt::green); painter.drawConvexPolygon(min, 4); painter.restore(); painter.rotate(s * 6); painter.setBrush(Qt::red); painter.setPen(Qt::red); painter.drawConvexPolygon(sec, 4); painter.restore(); }
main.cpp
#include <QApplication> #include "clock.h" int main(int argc, char* argv[]) { QApplication app(argc, argv); Clock c; c.show(); return app.exec(); }