QT项目-时钟挂件

效果展示

在这里插入图片描述

做成了一个时钟类,提供了一个秒数的接口来控制时钟类的事件!!!

在这里插入图片描述

时钟类的头文件

#ifndef MYCLOCK_H
#define MYCLOCK_H

#include <QWidget>
#include <QPaintEvent>
//绘图工具
#include <QPainter> //绘图方法
#include <QPen>     //绘图笔
#include <QBrush>   //画刷
#include<QTime>
#include<QTimer>
#include<QLCDNumber>
#include <QDebug>
#include <QIcon>
#include <QPainter>


class MyClock : public QWidget
{
    Q_OBJECT
public:
    explicit MyClock(int i,QWidget *parent = nullptr);
    void paintEvent(QPaintEvent *ev);
    void setSecond(int s);
signals:
private:
    int i;          //给外部提供接口,改变秒数
};

#endif // MYCLOCK_H

时钟类的CPP文件

#include "myclock.h"

MyClock::MyClock(int i,QWidget *parent) : QWidget(parent)
{
    this->setWindowTitle("我的时钟");
    this->setFixedSize(100,100);
    this->setWindowIcon(QIcon("3.png"));

    QTimer *timer = new QTimer(this);//产生一个定时器
    connect(timer,SIGNAL(timeout()), this,SLOT(update()));//关联定时器的信号与槽
    timer->start(1000);//开始定时器,每一秒钟更新一次
}
void MyClock::paintEvent(QPaintEvent *ev)
{
    QTime time=QTime::currentTime();
    /***************准备三个顶点*******************/
    static const QPoint hour[3] = {
        QPoint(14, 15),
        QPoint(-14, 15),
        QPoint(0, -130)
    };
    static const QPoint minute[3] = {
        QPoint(11, 13),
        QPoint(-11, 13),
        QPoint(0, -160)
    };
    static const QPoint second[3] = {
        QPoint(7, 8),
        QPoint(-7, 8),
        QPoint(0, -200)
    };
    /***************定义画刷*******************************/
    QBrush brush;//定义画刷
    brush.setColor(QColor(245,182,96));//设置画刷颜色
    brush.setStyle(Qt::SolidPattern);//设置样式
    /***************画圆***********************************************/
    QPainter p1(this);
    QPen pen;
    pen.setColor(QColor(203,210,255));
    pen.setWidth(18);
    p1.translate(width()/2,height()/2);
    p1.setPen(pen);
    p1.drawEllipse(QPoint(0,0),200,200);
    /***************画时小时线***********************************************/
    p1.setBrush(brush);//将画刷交给画家
    p1.setPen(Qt::NoPen);
    p1.save();//保存当下状态
    p1.rotate(30.0*(i/60/60/12+i/60/60/60.0));//图形旋转,以原点为旋转中心,顺时针水平旋转对应时针的角度
    p1.drawConvexPolygon(hour,3);//画时针这个凸多边形,第一个参数为所有的点,第二个参数为点的个数
    p1.restore();//恢复上一次保存的结果,和save()成对出现

    pen.setStyle(Qt::SolidLine);
    pen.setWidth(5);
    pen.setColor(Qt::black);
    p1.setPen(pen);
    for(int i = 0; i < 12; i++)
    {
        p1.drawLine(0,170,0,196);//画小时线
        p1.drawText(-5,-235,QString::number(i));//表明小时数
        p1.rotate(30);//每画一次旋转30度
    }
    /***************画时分钟线*******************/
    p1.setPen(Qt::NoPen);
    p1.setBrush(QColor("red"));
    p1.save();//保存当下状态
    p1.rotate(6.0*(i/60.0/60+i/60.0));//顺时针旋转至分针的位置
    p1.drawConvexPolygon(minute,3);//画分针这个凸多边形,第一个参数为所有的点,第二个参数为点的个数
    p1.restore();//恢复上一次保存的结果,和save()成对出现

    pen.setStyle(Qt::SolidLine);
    pen.setColor("red");
    pen.setWidth(1);
    p1.setPen(pen);
    for(int i = 0; i < 60; i++)
    {
        if( (i%5) != 0)
        {
            p1.drawLine(0,184,0,196);//画小时线
        }
        p1.rotate(6);//每画一次旋转30度
    }
    /***************画时秒线*******************/
    p1.setPen(Qt::NoPen);
    p1.setBrush(QColor(119,217,175));
    p1.save();
    p1.rotate(6*i);//顺时针旋转至秒针的位置
    p1.drawConvexPolygon(second, 3);//画秒针这个凸多边形,第一个参数为所有的点,第二个参数为点的个数
    p1.restore();
    /***************画圆心*******************/
    //画圆心
    p1.setBrush(Qt::black);
    p1.setPen(Qt::white);
    p1.save();
    p1.drawEllipse(QPoint(0,0),3,3);//画圆心
    p1.restore();
    /***************画圆心*******************/
    p1.setPen(Qt::black);
    if(time.hour()>=12)
    p1.drawText(-6,-50,"PM");//画文本区
    else
    p1.drawText(-6,-50,"AM");//画文本区
    p1.drawText(-8,-140,"大本钟");//画文本区
}
void MyClock::setSecond(int s)
{
    this->i = s;
    qDebug()<<"**************"<<i;
}

最后主函数要自己写

这个跟QT按键一样,具体怎么用还得自己去写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值