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();
}

Qt绘图习题-Clock