2D制图实战之绘制时钟

来源:互联网 发布:大学生常用电脑软件 编辑:程序博客网 时间:2024/06/05 22:57
#include "clock.h"#include<QTime>#include<QTimer>#include<QPainter>static const QPoint sed[4] = {    QPoint(0, -90),    QPoint(2, 0),    QPoint(0,8),    QPoint(-2,0)};static const QPoint min[4] = {    QPoint(0,-70),    QPoint(3,0),    QPoint(0,8),    QPoint(-3,0)};static const QPoint hour[4] = {    QPoint(0,-50),    QPoint(3,0),    QPoint(0,8),    QPoint(-3,0)};Clock::Clock(QWidget *parent)    : QWidget(parent){    QTimer *timer = new QTimer(this);    timer->start(1000);    connect(timer,SIGNAL(timeout()),this,SLOT(update()));    QFont font;    font.setPointSize(10);//字体大小设置为10    setFont(font);}void Clock::paintEvent(QPaintEvent *){    QPainter painter(this);    painter.setRenderHint(QPainter::Antialiasing, true);//消除锯齿    int side = qMin(width(), height());    painter.setViewport((width() - side) / 2, (height() - side) / 2,side, side);    painter.setWindow(0, 0, 200, 200);//设置(0,0)为新的坐标原点    draw(&painter);}Clock::~Clock(){}void Clock::draw(QPainter *painter){    QPen thickPen(palette().foreground(), 2.0);//设置刻度线为粗黑    QPen thinPen(palette().foreground(), 1.5);//设置刻度线为灰    QTime time = QTime::currentTime();    painter->translate(100,100);//重新设定坐标原点    painter->setRenderHint(QPainter::Antialiasing);//消除锯齿    painter->setBrush(Qt::red);    painter->setPen(Qt::red);    painter->save();//保存坐标系,防止坐标系跑偏了    painter->rotate(6.0*time.second());//注意是6.0,不是6    painter->drawConvexPolygon(sed,4);    painter->restore();//复位之前的坐标系    painter->setBrush(Qt::blue);    painter->setPen(Qt::blue);    painter->save();    painter->rotate(6.0*(time.minute()+time.second()/60.0));    painter->drawConvexPolygon(min,4);    painter->restore();    painter->setBrush(Qt::black);    painter->setPen(Qt::black);    painter->save();    painter->rotate(30.0*(time.hour()+time.minute()/60.0));    painter->drawConvexPolygon(hour,4);    painter->restore();    /*画刻度还有数字*/    for (int i = 1; i <=60; ++i) {        painter->save();        painter->rotate(6*i);//坐标轴旋转6度        if (i % 5 == 0) {            painter->setPen(thickPen);            painter->drawLine(0, -98, 0, -82);            painter->drawText(-20, -82, 40, 40,Qt::AlignHCenter | Qt::AlignTop,QString::number(i/5));        } else {            painter->setPen(thinPen);            painter->drawLine(0, -98, 0, -88);        }        //painter->rotate(-DegreesPerMinute);        painter->restore();    }}
原创粉丝点击