clock.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPaintEvent>
#include <QDebug>
#include <QPainter>
#include <QTimerEvent>
#include <QTimer>
#include <QDateTime>
#include <QIcon>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void timerEvent(QTimerEvent *event) override;
void paintEvent(QPaintEvent *event) override;
private:
Ui::Widget *ui;
int time_id;
QTimer *timer;
int hh = 0, mm = 0, ss = 0;
};
#endif // WIDGET_H
clock.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
time_id = this->startTimer(1000);
this->setWindowTitle("时钟");
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter p1(this);
QPen pen;
pen.setColor(QColor("red"));
pen.setStyle(Qt::SolidLine);
pen.setWidth(3);
p1.setPen(pen);
p1.translate(this->width()/2,this->height()/2);
p1.setBrush(QBrush(QColor("pink")));
p1.drawEllipse(QPointF(0,0),200,200);
p1.setPen(QColor("pink"));
for(int i = 0; i < 60; i++)
{
p1.drawLine(200,0,190,0);
p1.rotate(6);
}
p1.setFont(QFont("隶书",20));
for(int i = 1; i <= 12; i++)
{
p1.rotate(30);
p1.drawLine(0,-200,0,-180);
p1.drawText(-10,-155,QString("%1").arg(i));
QPainter p2(this);
p2.setPen(QColor("brown"));
p2.translate(this->width()/2, this->height()/2);
p2.rotate(-90);
//画笔2
QPen pen2;
pen2.setWidth(3);
pen2.setColor(QColor("red"));
p2.setPen(pen2);
//秒针
p2.rotate(ss*6);
p2.drawLine(0,0,150,0);
//分针
pen2.setColor(QColor("black"));
pen2.setWidth(5);
p2.setPen(pen2);
p2.rotate(-ss*6);
p2.rotate(mm*6+ss*6/60);
p2.drawLine(0,0, 150,0);
//时针
p2.rotate(-mm*6-ss*6/60);
p2.rotate(hh*30+mm*6/12+ss*6/60/12);
p2.drawLine(0,0, 100,0);
}
}
void Widget::timerEvent(QTimerEvent *event)
{
if(event->timerId()==time_id)
{
//数字显示当前时间
QDateTime sysDateTime=QDateTime::currentDateTime();
//讲QTime类对象转化为字符串
QString t=sysDateTime.toString("hh:mm:ss");
//展示到ui界面
ui->lab->setText(t);
//获取时分秒
QStringList list =t.split(":");
hh = list[0].toUInt();
mm = list[1].toUInt();
ss = list[2].toUInt();
update();
}
}