简单的时钟显示和牛客刷题

1.

//头文件
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPaintDevice>
#include <QTime>
#include <QTimer>
#include <QTimerEvent>
#include <QPaintEvent>
#include <QDebug>
#include <QPainter>
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 *p)override;
    void timerEvent(QTimerEvent *event)override;
private:
    Ui::Widget *ui;
    QTimer *timer;
    //计时器名字
    int sadd;
};
#endif // WIDGET_H


//源文件
#include "widget.h"
#include "ui_widget.h"
int h;
int s;
int m;
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    timer = new QTimer(this);
    QTime time;
    s = time.currentTime().second();
    h = time.currentTime().hour();
    m = time.currentTime().minute();
    this->startTimer(1000);

}

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

void Widget::paintEvent(QPaintEvent *p)
{
    qDebug()<<"绘制事件触发";
    //开始时画出棋盘
    QPainter painter(this);
    //消除锯齿
    painter.setRenderHint(QPainter::Antialiasing,true);
    //画笔颜色
    QPen pain_pen(QColor(0,0,0));
    //画笔宽度
    pain_pen.setWidth(5);
    //画笔起点
    painter.translate(400,300);
    //画家的画笔
    painter.setPen(pain_pen);
    //画园
    painter.drawEllipse(QPoint(0,0),250,250);

    for(int i=0; i<12; i++) {       //粗刻度线
        pain_pen.setWidth(6);
        pain_pen.setColor("black");
        painter.setPen(pain_pen);
        painter.drawLine(QPoint(0, 230), QPoint(0, 250));
        painter.rotate(30);
    }

    for(int i=0; i<60; i++) {       //细刻度线
        pain_pen.setWidth(3);
        pain_pen.setColor("black");
        painter.setPen(pain_pen);
        painter.drawLine(QPoint(0,245), QPoint(0,240));
        painter.rotate(6);
    }
    painter.end();

    //设置三个画家以及起点和消除锯齿
    //秒针
    QPainter psec(this);
    //设定初始位置
    psec.translate(400,300);
    //锯齿取消
    psec.setRenderHint(QPainter::Antialiasing,true);
    //设置每个时钟
    qDebug()<<"paint"<<s;
    //颜色
    QPen sec_pen(QColor(0,0,0));
    //秒针宽度
    sec_pen.setWidth(1);
    //绑定画家和笔
    psec.setPen(sec_pen);
    qDebug()<<"paint"<<s*6;
    //秒针偏移量
    psec.rotate(s*6);
    //设定秒针长度及初始位置很重要
    psec.drawLine(QPoint(0,0),QPoint(0,-150));
    psec.end();

    //分针
    QPainter pmin(this);
    //设定初始位置
    pmin.translate(400,300);
    //锯齿取消
    pmin.setRenderHint(QPainter::Antialiasing,true);
    //分针颜色
    QPen min_pen(QColor(0,0,255));
    //分针宽度
    min_pen.setWidth(6);
    //绑定画家和笔
    pmin.setPen(min_pen);
    qDebug()<<"paint"<<m*6+s*0.1;
    //设定分针偏移量
    pmin.rotate(m*6+s*0.1);
    //设定分针长度及初始位置很重要
    pmin.drawLine(QPoint(0,0),QPoint(0,-120));
    pmin.end();


    //时针
    QPainter phou(this);
    //设定初始位置
    phou.translate(400,300);
    //锯齿取消
    phou.setRenderHint(QPainter::Antialiasing,true);
    //时针颜色
    QPen hou_pen(QColor(255,0,0));
    //秒针宽度
    hou_pen.setWidth(10);
    //绑定画家和笔
    phou.setPen(hou_pen);
    qDebug()<<"paint"<<h*30+m*0.5;
    //偏移大小
    phou.rotate(h*30+m*0.5);
    //设定时针长度及初始位置很重要
    phou.drawLine(QPoint(0,0),QPoint(0,-80));
    phou.end();

    //让绘制事件不断的触发
    update();
}
void Widget::timerEvent(QTimerEvent *event)
{
    //触发这个计时器
    qDebug()<<s;
    s++;
    if((s % 60) == 0)
    {
        s = 0;
        m++;
        if((m % 60) == 0)
        {
            m = 0;
            h++;
            if((h%12) == 0)
            {
                h = 0;
            }
        }
    }
}

1点32分

2.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值