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

运行截图:

思维导图

相关推荐
sinat_276522572 小时前
C++中move的使用
开发语言·c++
微尘82 小时前
C语言存储类型 auto,register,static,extern
服务器·c语言·开发语言·c++·后端
金博客2 小时前
Qt 模型视图(二):模型类QAbstractItemModel
c++·qt6.7.2
五味香3 小时前
C++学习,动态内存
java·c语言·开发语言·jvm·c++·学习·算法
无名之逆3 小时前
计算机专业的就业方向
java·开发语言·c++·人工智能·git·考研·面试
Beauty.5683 小时前
P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
数据结构·c++·算法
jimmy.hua3 小时前
C++刷怪笼(5)内存管理
开发语言·数据结构·c++
xiaobai12 33 小时前
二叉树的遍历【C++】
开发语言·c++·算法
DieSnowK3 小时前
[项目][WebServer][Makefile & Shell]详细讲解
开发语言·c++·http·makefile·shell·项目·webserver
dc爱傲雪和技术4 小时前
在 VS Code 中调试 C++ 项目
开发语言·c++