.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPaintEvent>
#include <QPainter>
#include <QTimerEvent>
#include <QTime>
#include <QTimerEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void paintEvent(QPaintEvent *event) override;
void timerEvent(QTimerEvent *e) override;
private:
Ui::Widget *ui;
int timer_id;
QTimer *timer;
int hh=0,mm=0,ss=0;
};
#endif // WIDGET_H
.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
timer_id = this->startTimer(1000);
}
Widget::~Widget()
{
killTimer(timer_id);
delete ui;
}
//重写绘画事件
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QPen pen;
QPen pen2;
pen.setColor("green");
pen.setStyle(Qt::SolidLine);
pen.setWidth(10);
painter.setPen(pen);
//设置坐标系起始位置
painter.translate(this->width()/2,this->height()/2);
//设置画刷
painter.setBrush(QBrush(QColor("red")));
//画圆
painter.drawEllipse(QPoint(0,0),200,200);
for(int i=1;i<=60;++i)
{
painter.save();
painter.rotate(6*i);
if(i%5==0)
{
painter.setPen(pen);
painter.drawLine(200,0,190,0);
}
else
{
pen2.setWidth(3);
painter.setPen(pen2);
painter.drawLine(200,0,190,0);
}
painter.restore();
}
//秒针
painter.save();
pen.setWidth(5);
painter.setPen(pen);
painter.rotate(ss*6);
painter.drawLine(0,0,0,-100);
painter.restore();
//分针
painter.save();
pen.setWidth(7);
painter.setPen(pen);
painter.rotate(mm*6+ss*6/60);
painter.drawLine(0,0,0,-75);
painter.restore();
//时针
painter.save();
pen.setWidth(10);
painter.setPen(pen);
painter.rotate(hh*30+mm*6/12+ss*6/60/12);
painter.drawLine(0,0,0,-50);
painter.restore();
}
void Widget::timerEvent(QTimerEvent *e)
{
if(e->timerId()==timer_id)
{
QTime sys_t=QTime::currentTime();
hh=sys_t.hour();
mm=sys_t.minute();
ss=sys_t.second();
}
update();
}