当前位置: 首页 > news >正文

QT实现简易时钟

头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPaintEvent>
#include <QDebug>
#include <QPainter>
#include <QTimerEvent>
#include <QTimer>
#include <QTime>QT_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 *timer;double h = 0;double m = 0;double 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);//启动定时器,每隔1000ms自动调用定时器事件处理函数timer = new QTimer(this);timer->start(1000);connect(timer, &QTimer::timeout, this, &Widget::timeout_slot);}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{//实例化一个画家QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);//实例化一个画笔QPen pen;pen.setColor(QColor("black"));pen.setStyle(Qt::SolidLine);pen.setWidth(7);//表盘painter.setPen(pen);painter.translate(this->width()/2, this->height()/2);painter.drawEllipse(QPoint(0, 0), 200, 200);//刻度pen.setWidth(4);painter.setPen(pen);for(int i = 1; i <= 60; i++){painter.save();painter.rotate(i*6);if(!(i % 5)){painter.drawLine(0, -200, 0, -175);painter.drawText(-20, -170, 40, 40, Qt::AlignHCenter | Qt::AlignTop, QString::number(i/5));}else{painter.drawLine(0, -200, 0, -190);}painter.restore();}//时针painter.save();pen.setColor(QColor("red"));pen.setStyle(Qt::SolidLine);pen.setWidth(6);painter.setPen(pen);painter.rotate(30*h);painter.drawLine(0, 0, 0, -60);painter.restore();//分针painter.save();pen.setColor(QColor("green"));pen.setStyle(Qt::SolidLine);pen.setWidth(3);painter.setPen(pen);painter.rotate(6*m);painter.drawLine(0, 0, 0, -100);painter.restore();//秒针painter.save();pen.setColor(QColor("blue"));pen.setStyle(Qt::SolidLine);pen.setWidth(1);painter.setPen(pen);painter.rotate(6*(s+1));painter.drawLine(0, 0, 0, -160);painter.restore();update();
}void Widget::timeout_slot()
{QTime time = QTime::currentTime();h = time.hour();m = time.minute();s = time.second();}

在这里插入图片描述

http://www.lryc.cn/news/171333.html

相关文章:

  • win禁用更新,取消windows更新提示,禁用windows自动更新
  • 倒计时列表实现(小程序端Vue)
  • ContentType:application/x-www-form-urlencoded请求方法遇到的坑【PHP】
  • RabbitMQ - 死信、TTL原理、延迟队列安装和配置
  • 大数据与云计算实验一
  • 实施主品牌进化战略(一):确立主品牌进化架构
  • linux搭建单机ES,集成ik分词器,文本抽取,Kibana可视化平台
  • 金融和大模型的“两层皮”问题
  • 智能生活从这里开始:数字孪生驱动的社区
  • Python计算机二级知识点整理
  • 双系统ubuntu20.04(neotic版本)从0实现Gazebo仿真slam建图
  • (JavaEE)(多线程案例)线程池 (简单介绍了工厂模式)(含经典面试题ThreadPoolExector构造方法)
  • 单播与多播mac地址
  • 反向动力学Ik学习
  • 基于Levenberg-Marquardt算法的声源定位matlab仿真
  • vscode的Emmet语法失效
  • 堆排序(大根堆)
  • Mybatis学习笔记3 在Web中应用Mybatis
  • 软件测试之功能测试详解
  • javascript选取元素的范围,可以包含父级,也可以不包含父级
  • QGIS怎么修改源代码?持续更新...
  • dev board sig技术文章:轻量系统适配ARM架构芯片平台
  • MyBatis之增删查改功能
  • Leetcode算法入门与数组丨5. 数组二分查找
  • 拓扑关系如何管理?
  • vue的由来、vue教程和M-V-VM架构思想、vue的使用、nodejs
  • 课程表 循环依赖 拓扑排序 go语言
  • 【红包雨接口设计】
  • SSL证书到期更换证书会影响排名吗?
  • 前端常用库之-JavaScript工具库lodash