使用QT中的绘画工具与定时器工具实现简易时钟
创始人
2024-05-24 21:05:29
0

需求:

使用QT中的绘画工具与定时器工具实现简易时钟

代码实现过程:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include 
#include          //引入画家类
#include       //引入绘制事件类
#include         //引入时间类
#include   //引入定时器事件类
#include        //引入定时器类
#include     //引入日期时间类
#includeQT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();//重写绘制事件函数void paintEvent(QPaintEvent *event) override;private slots:void timeout_slot();private:Ui::Widget *ui;QTimer* timer1;  //定义一个定时器类的指针quint8 hour;quint8 minute;quint8 second;int cnt;};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#includeWidget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setFixedSize(800,800);this->cnt=0;QTime timer = QTime::currentTime(); //获取时间
//        QString t = timer.toString("HH:mm:ss A"); //转换为字符串QString t = timer.toString("HH:mm:ss"); //转换为字符串QStringList tlist = t.split(':');   //以:分割t
//        for(int i=0;istart(1000);//将定时器类对象的timeout信号与自定义的槽函数进行连接connect(timer1,&QTimer::timeout,this,&Widget::timeout_slot);}Widget::~Widget()
{delete ui;
}//重写绘制时间函数
void Widget::paintEvent(QPaintEvent *event)
{//    qDebug() << "***************";    //界面发生变化时调用QPainter painter(this);painter.setPen(QColor("blue"));    //给画家准备画笔painter.setFont(QFont("黑体",24));//设置字体QBrush brush(QColor("pink"));   //设置刷子——>设置填充色painter.setBrush(brush);QPen pen;//画园painter.translate(this->width()/2,this->height()/2);painter.drawEllipse(QPoint(0,0),300,300);//    painter.drawEllipse(QPoint(400,400),350,350);//画刻度 分for(int i=0;i<60;i++){pen.setColor(QColor("blue"));pen.setWidth(1);painter.setPen(pen);painter.drawLine(QPoint(0,300),QPoint(0,290));painter.rotate(6);}//画刻度 时for(int i=0;i<12;i++){pen.setColor(QColor("blue"));pen.setWidth(3);painter.setPen(pen);painter.drawLine(QPoint(0,300),QPoint(0,280));painter.rotate(30);}QPainter painterH(this);painterH.translate(this->width()/2,this->height()/2);pen.setColor(QColor("red"));pen.setWidth(6);painterH.setPen(pen);painterH.rotate(hour*30+(minute/60)*30+second/3600*30);painterH.drawLine(0,0,0,-30);QPainter painterM(this);painterM.translate(this->width()/2,this->height()/2);pen.setColor(QColor("green"));pen.setWidth(4);painterM.setPen(pen);painterM.rotate(minute*6+second/60*6);painterM.drawLine(0,0,0,-60);QPainter painterS(this);painterS.translate(this->width()/2,this->height()/2);pen.setColor(QColor("blue"));pen.setWidth(2);painterS.setPen(pen);painterS.rotate(second*6);painterS.drawLine(0,0,0,-90);}void Widget::timeout_slot(){QTime timer = QTime::currentTime(); //获取时间
//        QString t = timer.toString("HH:mm:ss A"); //转换为字符串QString t = timer.toString("HH:mm:ss"); //转换为字符串QStringList tlist = t.split(':');   //以:分割t
//        for(int i=0;ipaintEvent(q);this->cnt++;qDebug()<cnt;}

代码实现结果:

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...