QT中的绘画工具与定时器工具实现简易时钟

 作业要求:使用QT中的绘画工具与定时器工具实现简易时钟

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

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

//重写绘制事件处理函数
void Widget::paintEvent(QPaintEvent *event)
{
    //启动定时器
    time = startTimer(1000);
    QPen pen;
    QPainter p(this);
    p.setPen(Qt::black);
    p.setFont(QFont("黑体",10));
    p.setBrush(QColor("pink"));      //设置刷子
    p.translate(QPoint(width()/2,height()/2));
    p.drawEllipse(QPoint(0,0),200,200);
    for (int i=0;i<360/6;i++)
    {
        pen.setWidth(1);
        p.setPen(pen);
        if(i%5==0)
        {
            pen.setWidth(2);
            p.setPen(pen);
            p.drawLine(QPoint(0,-199),QPoint(0,-190));
            if(i==0)
                p.drawText(QPoint(-15,-160),QString::number(12));
            else
            p.drawText(QPoint(-15,-160),QString::number((i/5)));
        }
        p.drawLine(QPoint(0,-199),QPoint(0,-190));
        p.rotate(6);
    }

    QPainter p1(this);      //秒针
    p1.translate(QPoint(width()/2,height()/2));
    pen.setWidth(2);
    pen.setColor(QColor("red"));
    p1.setPen(pen);
    p1.rotate(6*second);
    p1.drawLine(QPoint(0,-150),QPoint(0,5));

    QPainter p2(this);      //分针
    p2.translate(QPoint(width()/2,height()/2));
    pen.setWidth(5);
    pen.setColor(QColor("blue"));
    p2.setPen(pen);
    p2.rotate(6*minute+6*second/60);
    p2.drawLine(QPoint(0,-100),QPoint(0,5));

    QPainter p3(this);      //时针
    p3.translate(QPoint(width()/2,height()/2));
    pen.setWidth(8);
    pen.setColor(QColor("yellow"));
    p3.setPen(pen);
    p3.rotate(30*hour+30*minute/60+6*second/60/12);
    p3.drawLine(QPoint(0,-50),QPoint(0,5));
}

//重写定时器事件处理函数
void Widget::timerEvent(QTimerEvent *event)
{
    //判断是那个定时器到位
    if(event->timerId()==time)
    {
        //获取时间
        QTime time = QTime::currentTime();
        QString t = time.toString("h:mm:ss");
        QStringList timelist =t.split(':'); //通过冒号分割字符串
        hour = timelist[0].toUInt(); //将字符串转变为无符号整数
        minute = timelist[1].toUInt();
        second = timelist[2].toUInt();
        conut++;
        update();
    }

}

 

实现效果:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值