使用Qt绘图制作一个钟表

这篇博客介绍如何使用Qt库通过编程实现一个动态钟表。通过设置定时器,每秒更新并重绘时钟指针,根据系统时间显示时、分、秒的变化。文章详细阐述了重绘表盘、时针、分针和秒针的函数实现,以及在paintEvent()函数中的调用逻辑,确保指针随着时间正确旋转。最后提到了关键的代码文件,如dialog.h, dialog.cpp和main.cpp。" 126058429,12416231,递归算法详解与应用,"['算法', '递归', 'c++']
摘要由CSDN通过智能技术生成

使用Qt绘图制作一个钟表

实际效果如下:

钟表

一、钟表实现的大概思路
设置定时器,定时器每隔一秒调用repaint()函数,paintEvent()函数随即被调用,利用paintEvent()函数重绘钟表,以秒为单位显示时钟表盘指针的变化。根据获取的当前系统时间的时钟,分钟以及秒钟的数据来绘制钟表的时针,分针以及秒针。paintEvent()函数里有涉及重绘需要调用的函数有四个,分别是重绘表盘函数,重绘时针函数,重绘分针函数以及重绘秒针函数。
二、重绘函数
因为有图形绕点旋转的情况,这里需要使用translate(x,y)函数转换坐标原点,方便成像。绘制钟表指针需要旋转坐标系,然后在旋转过的坐标系中绘制指针。指针绘制完毕后,恢复坐标系。 根据获取系统的时间,算出绘制指针前坐标需要旋转的角度。
时针:30.0*(time.hour()+time.minute()/60.0)
分针:6.0*(time.minute()+time.second()/60.0)
秒针:6.0*(time.second())
1、重绘表盘函数
表盘的刻度有时钟刻度和分钟刻度。一圈有六十个间隔,所以每个间隔6°,每隔6°为一个分钟时刻,每隔30°为一个时钟时刻。

void Dialog::ClockDial(QPainter *painter){
   
    for(int i=1;i<=60;i++){
   
        painter->save();
        painter->rotate(6.0*i);
        if(i%5==0){
   
            painter->drawLine(0,-88,0,-95);
            painter->drawText(-20, -82, 40, 40,
                              Qt::AlignHCenter | Qt::AlignTop,
                              QString::number(i/5));
        }
        else{
   
            painter->drawLine(0,-92,0,-95);
        }
        painter->restore();
    }
}

2、重绘时针函数
确定组成时针四个点的坐标,使用drawPolygon()函数或者drawConvexPolygon()函数绘制。

const QPoint Dialog::hourhand[4] = {
   
    QPoint(3, 5),
    QPoint(0, 13),
    QPoint(-3, 5),
    QPoint(0, -40)
};

void Dialog::Hourhand(QPainter *painter){
   
    QTime time=QTime::currentTime();
    painter->save();
    painter->rotate(30.0*(time.hour()+time.minute()/60.0));
    painter->drawPolygon(hourhand,4);
    painter->restore();
}

3、重绘分针函数
确定组成分针四个点的坐标,使用drawPolygon()函数或者drawConvexPolygon()函数绘制。

const QPoint Dialog::minutehand[4] = {
   
    
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值