基于Qt的时钟控件

提示:一个简易的时钟控件


前言

简单的实现了一个时钟控件,功能比较单调;


一、时钟控件是什么?

控件是指对数据和方法的封装,而时钟控件就是封装了一个时钟功能的类,可以达到时钟的功能;

二、演示代码

1.结果演示

 本控件默认设置从0点开始,后续功能待自行发挥


2.结构代码

myclock.h:

#include <QWidget>
#include <QPaintEvent>
#include <QPainter>   //绘图方法
#include <QPen>       //绘图工具、画笔
#include <QBrush>     //绘图工具、画刷
#include <QtMath>
#include <QTimer>

class MyClock : public QWidget
{
    Q_OBJECT
public:
    explicit MyClock(QWidget *parent = nullptr);

    void paintEvent(QPaintEvent *event);          //重写绘图事件



    QTimer *time;                       //设置一个定时器

    int flag;                           //设置一个标志


};

myclock.c:

#include "myclock.h"

MyClock::MyClock(QWidget *parent) : QWidget(parent)
{
    setFixedSize(1000,1000);
    //刷新绘图事件
    update();
    time = new QTimer;   //初始化定时器
    flag = 0;            //初始化标志
    //正常速度
//    time->start(1000);
    //调试速度
    time->start(10);
    /****************关联定时器信号************************/
    connect(time, SIGNAL(timeout()), this, SLOT(update()));
}
void MyClock::paintEvent(QPaintEvent *event)
{
    QPainter p(this);
    QPen pen(Qt::LinearGradientPattern);
    /*****************画时钟外圆和内部背景**********************/
    pen.setColor("yellow");
    pen.setWidth(20);
    p.setPen(pen);
    p.setBrush(QBrush( QColor("pink"), Qt::Dense1Pattern) );
    p.drawEllipse(QPoint(500,500), 450, 450);
    /****************画时钟的刻度******************************/
    pen.setColor("black");
    pen.setWidth(4);
    p.setPen(pen);
    for(int i = 0 ; i < 60 ; i++)
    {
        int x_start, y_start, x_end, y_end;
        if(i%5 == 0)                                    //画大刻度
        {
            x_start = 500 + sin(i * M_PI / 30) * 380;
            x_end = 500 + sin(i * M_PI / 30) * 450;
            y_start = 500 + cos(i * M_PI / 30) * 380;
            y_end = 500 + cos(i * M_PI / 30) * 450;
        }else{                                          //画小刻度
            x_start = 500 + sin(i * M_PI / 30) * 430;
            x_end = 500 + sin(i * M_PI / 30) * 450;
            y_start = 500 + cos(i * M_PI / 30) * 430;
            y_end = 500 + cos(i * M_PI / 30) * 450;
        }
        p.drawLine(QPoint(x_start, y_start), QPoint(x_end, y_end));
    }
    QPen pen1(Qt::LinearGradientPattern);
    /********************画秒针********************/
    int x1 = 500 + sin(flag * M_PI / 30) * 355;
    int y1 = 500 - cos(flag * M_PI / 30) * 355;
    QPainter p1(this);
    pen1.setColor("green");
    pen1.setWidth(6);
    p1.setPen(pen1);
    p1.drawLine(QPoint(500, 500), QPoint(x1, y1));
    /*******************画分针************************/
    int x2 = 500 + sin(flag * M_PI / (30 * 60)) * 220;
    int y2 = 500 - cos(flag * M_PI / (30 * 60)) * 220;
    QPainter p2(this);
    pen1.setColor("purple");
    pen1.setWidth(9);
    p2.setPen(pen1);
    p2.drawLine(QPoint(500, 500), QPoint(x2, y2));
    /**********************画时针************************/
    int x3 = 500 + sin(flag * M_PI / (30 * 60 * 12)) * 100;
    int y3 = 500 - cos(flag * M_PI / (30 * 60 * 12)) * 100;
    QPainter p3(this);
    pen1.setColor("red");
    pen1.setWidth(12);
    p3.setPen(pen1);
    p3.drawLine(QPoint(500, 500), QPoint(x3, y3));
    /**************每过一秒让标志加一从而改变时分秒针的角度*************/
    flag++;
}

总结

以上就是简单的时针控件的代码分享,本文仅仅简单实现了一个时钟控件,而和真实的时针有部分差距,后续内容就看大家自由发挥了。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值