基于QT的时钟表盘设计

基于QT设计根据电脑本地时间的时钟,要求具有时针,分针,秒针,而且根据时间产生对应的偏移

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QDebug>
#include <QTimerEvent>
#include <QTime>
#include <QTimer>


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;

private:
    Ui::Widget *ui;
    QTimer *time;
    QTime t;
    int hour;
    int minute;
    int second;
};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //初始化实时绘制时钟连接
      //初始化时钟与画家
    time = new QTimer(this);
    connect(time,&QTimer::timeout,[&](){update();});
    time->start(1000);
}

Widget::~Widget()
{
    delete ui;
}
//定义画板
void Widget::paintEvent(QPaintEvent *event)
{
    //准备画笔
    QPainter p(this);
    p.setPen(Qt::black);
    p.setFont(QFont("楷书",15));
    //偏移画笔到ui中央
    p.translate(this->width()/2,this->height()/2);
    //给刷子上色
    QBrush b(QColor("yellow"));
    p.setBrush(b);
    //画表盘
    p.drawEllipse(QPoint(0,0),180,180);
    //画刻度
       //修改画笔宽度
    p.setPen(QPen(Qt::black,3));
    int j = 6;
    for(int i=0;i < 60;i++)
    {
        //画长短刻度
        if(i%5 == 0)
        {
            p.drawLine(QPoint(0,180),QPoint(1,165));
            p.drawText(QPoint(-9,160),QString::number(j));
            if(j+1 > 12)
                 j = 0;
            j++;
        }else
        {
            p.drawLine(QPoint(0,180),QPoint(1,175));
        }
        p.rotate(6);
    }
    qDebug()<<"hello";
    //获取时间
    t = QTime::currentTime();
    //将时间转换成数值,按数值调整时分秒针
    QString t_s = t.toString("HH:mm:ss");
    QStringList timelist = t_s.split(":");//用:将字符串分割成3部分
    quint8 hour = timelist[0].toUInt();//将字符串转换成无符号整数
    quint8 minute = timelist[1].toUInt();
    quint8 second = timelist[2].toUInt();

    //设置画笔属性
    p.setPen(QPen(Qt::red,9));//时针
    p.rotate(hour*30+6*second/60/12+30*minute/60);
    p.drawLine(QPoint(0,-50),QPoint(0,5));
    p.rotate(-(hour*30+6*second/60/12+30*minute/60));

    p.setPen(QPen(Qt::blue,9));//分针
    p.rotate(6*second/60+6*minute);
    p.drawLine(QPoint(0,-70),QPoint(0,7));
    p.rotate(-(6*second/60+6*minute));

    p.setPen(QPen(Qt::green,9));//秒针
    p.rotate(6*second);
    p.drawLine(QPoint(0,-100),QPoint(0,9));
    qDebug() <<hour<<":"<<minute<<":"<<second;
}

main文件

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

实现效果