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();
}

运行截图:

思维导图

相关推荐
ULTRA??2 分钟前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
凌云行者38 分钟前
OpenGL入门005——使用Shader类管理着色器
c++·cmake·opengl
凌云行者41 分钟前
OpenGL入门006——着色器在纹理混合中的应用
c++·cmake·opengl
~yY…s<#>1 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
可均可可2 小时前
C++之OpenCV入门到提高004:Mat 对象的使用
c++·opencv·mat·imread·imwrite
白子寰2 小时前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++
小芒果_012 小时前
P11229 [CSP-J 2024] 小木棍
c++·算法·信息学奥赛
gkdpjj2 小时前
C++优选算法十 哈希表
c++·算法·散列表
王俊山IT2 小时前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
-Even-2 小时前
【第六章】分支语句和逻辑运算符
c++·c++ primer plus