9月20日作业

时钟代码:

widget.h

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QTime>
#include <QTimer>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();



public slots:
    void paintEvent(QPaintEvent *event) override;
    void myupdate();



private:
    Ui::Widget *ui;
    //定义一个计时器
    QTimer *timer;


};
#endif // WIDGET_H

widget.cpp:

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

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

    timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &Widget::myupdate);
    timer->start(1000);

}

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

void Widget::paintEvent(QPaintEvent *event)
{
    qDebug()<<"paintEvent执行";
    QTime nowtime = QTime::currentTime();
    int hour = nowtime.hour();
    int minute = nowtime.minute();
    int second = nowtime.second();
    //定义一个画家类
    QPainter painter(this);
    //实例化一个画笔
    QPen pen;           //使用无参构造
    pen.setColor(QColor("blue"));

    pen.setWidth(10);
    //将画笔给画家安排上
    painter.setPen(pen);
    //给画家偏移起始坐标点
    painter.translate(this->width()/2, this->height()/2);
    //画个圆
    painter.drawEllipse(QPoint(0,0), 200,200);

    pen.setWidth(2);
    painter.setPen(pen);
    //12刻度实现
    for(int i=1; i<=12; i++){
        painter.drawLine(180, 0, 200, 0);
        painter.rotate(360/12);
    }

    //60刻度实现
    painter.save();
    for(int i=1; i<=60; i++){
        painter.drawLine(190, 0, 200, 0);
        painter.rotate(360/60);
    }

    //数字实现
    for(int i=12; i>=1; i--){
        painter.drawText(QPoint(0, -160), QString::number(i));
        painter.rotate(-360/12);
    }
    painter.restore();
    //给画家 偏移坐标系
    painter.save();
    painter.rotate((hour-12)%12*360/12+180);         //旋转坐标系
    qDebug()<<(hour-12)%12/12*360+180;
    pen.setColor(QColor("red"));
    pen.setWidth(10);
    painter.setPen(pen);
    //画个直线 时针
    painter.drawLine(0, 0, 0, 100);

    //给画家 偏移坐标系
    painter.restore();
    painter.save();
    painter.rotate(minute*360/60+second/60+180);         //旋转坐标系
    pen.setColor(QColor("yellow"));
    pen.setWidth(5);
    painter.setPen(pen);
    painter.translate(0, 0);
    //画个直线 分针
    painter.drawLine(0, 0, 0, 125);

    //给画家 偏移坐标系
    painter.restore();
    painter.save();
    painter.rotate(second*360/60+180);         //旋转坐标系
    pen.setColor(QColor("pick"));
    pen.setWidth(2);
    painter.setPen(pen);
    //画个直线 秒针
    painter.drawLine(0, 0, 0, 150);
}

void Widget::myupdate()
{
    update();
}

运行截图:

思维导图

相关推荐
ll7788112 小时前
C++学习之路,从0到精通的征途:继承
开发语言·数据结构·c++·学习·算法
我不想当小卡拉米3 小时前
【Linux】操作系统入门:冯诺依曼体系结构
linux·开发语言·网络·c++
炎芯随笔3 小时前
【C++】【设计模式】生产者-消费者模型
开发语言·c++·设计模式
乌鸦9443 小时前
《类和对象(下)》
开发语言·c++·类和对象+
逐光沧海4 小时前
数据结构基础--蓝桥杯备考
数据结构·c++·算法·蓝桥杯
前进的程序员4 小时前
嵌入式开发中 C++ 跨平台开发经验与解决方案
开发语言·c++
菜一头包4 小时前
c++ std库中的文件操作学习笔记
c++·笔记·学习
吃个早饭6 小时前
2025年第十六届蓝桥杯大赛软件赛C/C++大学B组题解
c语言·c++·蓝桥杯
阿沁QWQ7 小时前
单例模式的两种设计
开发语言·c++·单例模式
六bring个六7 小时前
qtcreater配置opencv
c++·qt·opencv·计算机视觉·图形渲染·opengl