用Qt完成时钟

该文章展示了一个使用Qt框架实现的时钟应用。通过QTimer更新时间,QPaintEvent重绘时钟界面,包括小时、分钟和秒针的动态显示。代码中定义了Widget类,覆盖了paintEvent方法来绘制时钟,包括刻度、时针、分针和秒针。
摘要由CSDN通过智能技术生成

用Qt完成时钟

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>
#include <QDateTime>
#include <QPainter>
#include <QPaintEvent>
#include <QDebug>

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 *timer;  //定义定时器类指针

    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);
    //给定时器类指针实例化对象
    timer = new QTimer(this);
    timer->start(1000);
    connect(timer,&QTimer::timeout,[&](){
        update();
    });
}

Widget::~Widget()
{
    delete ui;
}

//绘画事件定义
void Widget::paintEvent(QPaintEvent *event){

    //获取时间
    QDateTime time = QDateTime::currentDateTime();
    //将时间转化成字符串
    QString t = time.toString("HH:mm:ss");
    //分离时间
    QStringList timelist = t.split(':');
    hour = timelist[0].toUInt();
    minute = timelist[1].toUInt();
    second = timelist[2].toUInt();

    //定义一个画家类对象
    QPainter p(this);
    //给画家准备画笔
    p.setPen(QPen(Qt::black,3));

    //定义一把刷子类对象 给画家一把刷子
    QBrush b(QColor("white"));
    p.setBrush(b);

    //移动画家的起始坐标
    p.translate(this->width()/2,this->height()/2);

    //画圆
    p.drawEllipse(QPoint(0,0),200,200);

    //画时钟刻度
    int j = 12;
    for(int i=0;i<60;i++){
        p.setPen(QPen(Qt::black,2));
        p.drawLine(QPoint(0,200),QPoint(0,195));
        if(i%5==0){
            p.setPen(QPen(Qt::black,3));
            p.drawLine(QPoint(0,200),QPoint(0,190));
            p.drawText(QPoint(-3,-175),QString::number(j));
            if(j>=12){
               j=0;
            }
            j++;
        }
        p.rotate(6);
    }

    //时针
    p.setPen(QPen(Qt::red,10));
    p.rotate(hour*30+minute*0.5+second*0.0083);
    p.drawLine(QPoint(0,-50),QPoint(0,5));
    p.rotate(-(hour*30+minute*0.5+second*0.0083));

    //分针
    p.setPen(QPen(Qt::green,7));
    p.rotate(minute*6+second*0.1);
    p.drawLine(QPoint(0,-100),QPoint(0,5));
    p.rotate(-(minute*6+second*0.1));

    //秒针
    p.setPen(QPen(Qt::blue,4));
    p.rotate(second*6);
    p.drawLine(QPoint(0,-150),QPoint(0,5));
    qDebug() << hour << ":" << minute << ":" << second;

}


主调函数

#include "widget.h"

#include <QApplication>

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

运行结果 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值