DAY74

复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

#include <QPainter>     //画家类
#include <QTimer>       //定时器类
#include <QTime>        //时间类


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

private:
    Ui::Widget *ui;

    //定义一个定时器变量
    QTimer t1;

    void paintEvent(QPaintEvent *event) override;

    int h=0,m=0,s=0;
};
#endif // WIDGET_H

#include "widget.h"
#include "ui_widget.h"

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

    t1.start(1000);





    //由于定时器事件的信号与槽绑定
    connect(&t1,&QTimer::timeout,this,&Widget::timeout_slot);
}

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

//绘制事件处理函数
void Widget::paintEvent(QPaintEvent *event)
{
    //实例化一个画家
    QPainter painter(this);

    //准备画笔
    QPen pen;

    pen.setColor(QColor("black"));    //设置颜色
    pen.setWidth(3);               //设置画笔粗细

    //准备字体
    QFont font;
    font.setFamily("楷体");                 //设置字体
    font.setPointSize(20);                  //设置字号

    //连接画家和画笔
    painter.setPen(pen);
    //给画家安排字体
    painter.setFont(font);

    //设置画家坐标起始点
    painter.translate(this->width()/2,this->height()/2);

    //绘制一个椭圆
    painter.drawEllipse(QPoint(0,0),200,200);

    //时针刻度
    for(int i=0;i<12;i++)
    {
        painter.rotate(30);
        painter.drawLine(QPoint(0,-180),QPoint(0,-200));
    }

    //分针刻度
    for(int i=0;i<60;i++)
    {
        painter.rotate(6);
        painter.drawLine(QPoint(0,-190),QPoint(0,-200));
    }

    //绘制刻度数字
    for(int i=0;i<12;i++)
    {
        static int num = 1;
        QString str = QString::number(num);
        painter.rotate(30);
        painter.drawText(QPoint(-10,-160),str);
        if(num == 12)
        {
            num = 0;
        }
        num++;
    }

    QPainter painter1(this);
    painter1.translate(this->width()/2,this->height()/2);
    QPen pen1;
    pen1.setColor(QColor("green"));
    pen1.setWidth(3);
    painter1.setPen(pen1);

    painter1.rotate(s*6);
    painter1.drawLine(0,0,0,-150);

    QPainter painter2(this);
    painter2.translate(this->width()/2,this->height()/2);
    QPen pen2;
    pen2.setColor(QColor("blue"));
    pen2.setWidth(9);
    painter2.setPen(pen2);

    painter2.rotate(m*6);
    painter2.drawLine(0,0,0,-100);

    QPainter painter3(this);
    painter3.translate(this->width()/2,this->height()/2);
    QPen pen3;
    pen3.setColor(QColor("red"));
    pen3.setWidth(15);
    painter3.setPen(pen3);

    painter3.rotate(h*30);
    painter3.drawLine(0,0,0,-100);

    //更新界面内容
    this->update();
}

void Widget::timeout_slot()
{
    //获取系统的时间
    QTime sysTime = QTime::currentTime();

    h = sysTime.hour();
    if(h>12)
    {
        h = h-12;
    }else if(h == 24)
    {
        h = 0;
    }
    m = sysTime.minute();
    s = sysTime.second();
}
相关推荐
蓝祁子yoky2 小时前
Qt学习日记 Day13:网络编程(一)-TCP基础与Socket实战
网络·qt·学习
飞浪纪元[FWC–FE]5 小时前
从零到一键绿:Qt 5.14.2 + VS2019 开发环境搭建、Kit 套件配置与构建错误修复完全手册
开发语言·qt
ShineWinsu6 小时前
对于Qt:QCheckBox常见属性的详细解析
c++·qt·面试·笔试·gui·qcheckbox·多选框
ShineWinsu9 小时前
对于Qt:QPushButton常见属性的解析
开发语言·c++·qt·api·gui·按钮·qpushbutton
飞浪纪元[FWC–FE]9 小时前
Qt 工程创建与 CMake / qmake 构建规范
开发语言·数据库·qt
Lhan.zzZ9 小时前
用 Qt 构建线程安全的通讯静态库:从线程亲和性到完整工程
c++·vscode·qt·tcp/ip·udp
飞浪纪元[FWC–FE]10 小时前
Qt 构建排错实录:从 MSB 1009 到生成器选型
开发语言·数据库·qt
小徐不徐说20 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
小王C语言21 小时前
Qt常用控件:容器类控件,标题分组框、标签页(浏览器标签)
开发语言·qt
TMedical21 小时前
MedPlanning 截骨模拟矫形功能
c++·图像处理·人工智能·qt·健康医疗