QT的绘画事件和网络通信

画一个时钟

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QDebug>
#include <QTime>
#include <QTimer>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    t1.start(1000);  // 每秒钟更新一次
    connect(&t1, &QTimer::timeout, this, &Widget::time_slot);
}

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

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen;
    QPen pen1;
    QPen pen2;

    pen.setStyle(Qt::SolidLine);
    pen.setColor(Qt::black);
    pen.setWidth(5);

    pen1.setStyle(Qt::SolidLine);
    pen1.setColor(Qt::black);
    pen1.setWidth(2);

    pen2.setStyle(Qt::SolidLine);
    pen2.setColor(Qt::black);
    pen2.setWidth(4);

    painter.setPen(pen);
    painter.translate(this->width() / 2, this->height() / 2);
    painter.drawEllipse(QPoint(0, 0), 200, 200);

    pen.setWidth(10);
    painter.setPen(pen);
    painter.drawLine(QPoint(0, 0), QPoint(0, 0));

    int i = 0;
    while (i < 60) {
        if (i == 0 || i == 15 || i == 30 || i == 45) {
            pen.setWidth(5);
            painter.setPen(pen);
            painter.drawLine(QPoint(0, -200), QPoint(0, -180));
        } else if (i == 5 || i == 10 || i == 20 || i == 25 || i == 35 || i == 40 || i == 50 || i == 55) {
            painter.setPen(pen2);
            painter.drawLine(QPoint(0, -200), QPoint(0, -190));
        }
        painter.setPen(pen1);
        painter.rotate(6);
        painter.drawLine(QPoint(0, -200), QPoint(0, -195));
        i = i + 1;
    }

    painter.drawText(QPoint(0, -165), "12");
    painter.drawText(QPoint(165, 0), "3");
    painter.drawText(QPoint(0, 165), "6");
    painter.drawText(QPoint(-165, 0), "9");

    // 画秒针
    pen.setColor(Qt::red);
    painter.setPen(pen);
    painter.save();
    painter.rotate(secondAngle);
    painter.drawLine(QPoint(0, 0), QPoint(0, -80));
    painter.restore();

    // 画分针
    pen2.setColor(Qt::green);
    painter.setPen(pen2);
    painter.save();
    painter.rotate(minuteAngle);
    painter.drawLine(QPoint(0, 0), QPoint(0, -70));
    painter.restore();

    // 画时针
    pen1.setColor(Qt::blue);
    painter.setPen(pen1);
    painter.save();
    painter.rotate(hourAngle);
    painter.drawLine(QPoint(0, 0), QPoint(0, -50));
    painter.restore();
}

void Widget::time_slot()
{
    QTime currentTime = QTime::currentTime();
    int seconds = currentTime.second();
    int minutes = currentTime.minute();
    int hours = currentTime.hour();

    // 计算角度
    secondAngle = seconds * 6;  // 每秒钟6度
    minuteAngle = minutes * 6 + seconds * 0.1;  // 每分钟6度,加上秒针的影响
    hourAngle = hours * 30 + minutes * 0.5;  // 每小时30度,加上分钟的影响

    this->update();  // 刷新界面
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值