目的:实现时钟效果,实现时分秒指针的进位与清零
源代码
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
timer=startTimer(1000);
QTime nowtime = QTime::currentTime();
h = nowtime.hour();
m = nowtime.minute();
s = nowtime.second();
}
Widget::~Widget()
{
delete ui;
}
//重写定时器事件的处理函数
void Widget::timerEvent(QTimerEvent *event)
{
s++;
if(s == 60)
{
s = 0;
m++;
if(m == 60)
{
m = 0;
h++;
if(h == 24)
{
h = 0;
}
}
}
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
QPen pen(Qt::black,3);
painter.setPen(pen);
QPoint center(width()/2,height()/2);
painter.translate(center);
QPoint cen(0,0);
// painter.drawEllipse(cen,200,200);
for(int i=0;i<12;i++)
{
painter.rotate(30);
painter.drawLine(0,-180,0,-200);
}
for(int i=0;i<60;i++)
{
painter.rotate(6);
painter.drawLine(0,-190,0,-200);
}
painter.end();
QPainter painter_s(this);
painter_s.setRenderHint(QPainter::Antialiasing,true);
pen.setWidth(1);
painter_s.setPen(pen);
painter_s.translate(center);
painter_s.rotate(s * 6);
painter_s.drawLine(0,0,0,-150);
painter_s.end();
QPainter painter_m(this);
painter_m.setRenderHint(QPainter::Antialiasing,true);
pen.setWidth(4);
pen.setColor(Qt::blue);
painter_m.setPen(pen);
painter_m.translate(center);
painter_m.rotate(m * 6);
painter_m.drawLine(0,0,0,-150);
painter_m.end();
QPainter painter_h(this);
painter_h.setRenderHint(QPainter::Antialiasing,true);
pen.setWidth(7);
pen.setColor(Qt::red);
painter_h.setPen(pen);
painter_h.translate(center);
painter_h.rotate(h * 30 + m * 0.5);
painter_h.drawLine(0,0,0,-100);
painter_h.end();
update();
}