头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPainter>
#include <QDebug>
#include <QTime>
#include <QTimer>
#include <QDateTime>
//#include <string>
#include <QPixmap>
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 timeout_slot();
private:
    Ui::Widget *ui;
    //实例化一个膜
    QPixmap *pix;
    //定义一个定时器变量
    QTimer t1;
};
#endif // WIDGET_H
 
 
源文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //实例化屏幕膜
    pix = new QPixmap(this->size());      //实例化一个膜大小跟当前界面一致
    pix->fill(Qt::white);               //使用白色进行填充
    //将时间函数与t1绑定在一起
    t1.start(1000);
    connect(&t1, &QTimer::timeout, this, &Widget::timeout_slot);
}
Widget::~Widget()
{
    delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{
    //1、准备一个画家,在界面上进行绘制
    QPainter p2(this);
     //2、将pix绘制到界面上
    p2.drawPixmap(QPoint(0,0), *pix);
    //实例化一个画家
    QPainter painter(this);
    //准备画笔
    QPen pen;
    pen.setStyle(Qt::SolidLine);
    pen.setColor(QColor("black"));
    pen.setWidth(5);
    //准备字体
    QFont font;
    font.setFamily("楷体");        //设置字体族
    font.setStyle(QFont::StyleItalic);    //设置字体倾斜
    font.setPointSize(13);             //设置字号
    //将画家和笔绑定
    painter.setPen(pen);
    //给画家安排字体
    painter.setFont(font);
    //在屏幕中间画一个圆
    painter.translate(this->width()/2,this->height()/2);
    int radius=this->width()>this->height()?this->height():this->width();
    painter.drawEllipse(QPoint(0,0),radius/2-10,radius/2-10);
    //将坐标轴变成正方向
    painter.rotate(6+180);
    //绘制钟表
    for(int i=1;i<=60;i++)
    {
        if(i%5!=0)
        {
            painter.drawLine(0,radius/2-20,0,radius/2-10);
        }else
        {
            painter.drawLine(0,radius/2-30,0,radius/2-10);
            // 将整数 i 转换为 QString
            QString str = QString::number(i/5);
            painter.drawText(QPoint(0,radius/2-30-10),str);
        }
        painter.rotate(6);
    }
    painter.rotate(-6);
}
void Widget::timeout_slot()
{
    pix->fill(Qt::white);
    QTime sysTime = QTime::currentTime();
    // 分别提取小时、分钟和秒
    int hours = sysTime.hour();
    int minutes = sysTime.minute();
    int seconds = sysTime.second();
    qDebug()<<seconds;
    //实例化一个画家
    QPainter painter(pix);
    //准备画笔
    QPen pen;
    pen.setStyle(Qt::SolidLine);
    
    //将坐标轴移到中点
    painter.translate(this->width()/2,this->height()/2);
    //将坐标轴变成秒针反向
    painter.rotate(180+6*seconds);
    //2、使用画家画秒针
    pen.setColor(QColor("green"));
    pen.setWidth(5);
    painter.setPen(pen);
    painter.drawLine(0,-20,0,200);
    //将坐标轴变成秒针方向
    painter.rotate(360-6*seconds+6*minutes);
    //2、使用画家画分针
    pen.setColor(QColor("blue"));
    pen.setWidth(10);
    painter.setPen(pen);
    painter.drawLine(0,-15,0,150);      
    //将坐标轴变成秒针方向
    painter.rotate(360+30*hours-6*minutes);
    //2、使用画家画时针
    pen.setColor(QColor("red"));
    pen.setWidth(15);
    painter.setPen(pen);
    painter.drawLine(0,-10,0,100);      
    //3、更新界面内容
    this->update();
}
 
 










