QT使用事件事件和绘制事件实现简易时钟

这个时钟实现的底层原理主要是利用 Qt 的绘图机制和定时器。首先,设置固定大小的窗口,创建定时器并连接到槽函数,定时器每秒钟触发一次,触发窗口重绘。在paintEvent函数中,使用QPainter进行绘图,绘制圆形表盘和时间点标记。通过获取当前时间,计算时针、分针和秒针的旋转角度,使用rotate函数旋转坐标系,然后绘制相应长度的直线代表指针。每次定时器触发时,调用update函数引发重绘,实现时钟的动态显示。
widght.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>
#include <QLabel>
#include <QPen>
#include <QPainter>
#include <QPaintEvent>
#include <QTime>
#include <QTimer>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;//定时器QTimer *timer;//绘制事件void paintEvent(QPaintEvent *event) override;private slots:;void update_slot();
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"#include <QTime>
#include <QPainter>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 设置窗口大小this->setFixedSize(600, 600);// 创建定时器timer = new QTimer(this);// 连接定时器时信号与槽函数connect(timer, &QTimer::timeout, this, &Widget::update_slot);timer->start(1000);QLabel *name = new QLabel(this);name->setText("江诗丹顿");name->move(this->width()/2-30,this->height()/2+100);name->setStyleSheet("color: red; font-size: 16px;");}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);// 获取当前时间QTime time = QTime::currentTime();// 准备画笔QPen pen;pen.setColor("green");pen.setWidth(2);// 实例化一个画家QPainter painter(this);painter.setPen(pen);painter.drawEllipse(this->width()/2 - 200, this->height()/2 - 200, 400, 400);// 设置坐标系起点为窗口中心painter.translate(this->width()/2, this->height()/2);// 绘制时间点标记pen.setColor("gray");pen.setWidth(2);painter.setPen(pen);for (int i = 0; i < 12; ++i) {painter.save();painter.rotate(30 * i);painter.drawLine(180, 0, 190, 0);painter.restore();}// 绘制时针painter.rotate(30.0 * ((time.hour() % 12) + time.minute() / 60.0 + time.second() / 3600.0));pen.setWidth(8);pen.setColor("blue");painter.setPen(pen);painter.drawLine(0, 0, 50, 0);// 绘制分针painter.rotate(6.0 * (time.minute() + time.second() / 60.0));pen.setWidth(4);pen.setColor("orange");painter.setPen(pen);painter.drawLine(0, 0, 70, 0);// 绘制秒针painter.rotate(6.0 * time.second());pen.setWidth(2);pen.setColor("red");painter.setPen(pen);painter.drawLine(0, 0, 90, 0);}void Widget::update_slot()
{update();
}
相关文章:
QT使用事件事件和绘制事件实现简易时钟
这个时钟实现的底层原理主要是利用 Qt 的绘图机制和定时器。首先,设置固定大小的窗口,创建定时器并连接到槽函数,定时器每秒钟触发一次,触发窗口重绘。在paintEvent函数中,使用QPainter进行绘图,绘制圆形表…...
kubeadm方式安装k8s
一、安装环境 环境准备:(有阿里云)centos7 k8s-master 192.168.1.11 k8s-node1 192.168.1.22 k8s-node2 192.168.1.33 二、前期准备 在k8s-master主机 [rootk8s-master ~]# vim /etc/hosts…...
如何使用go生成可执行文件
在 Go 中生成可执行文件非常简单。你可以使用 go build或者go install 命令。以下是步骤: 1. 步骤 1.1. 打开终端,导航到你的 Go 项目目录 确保你在包含 main 包的目录中,通常这是项目的根目录或包含 main.go 文件的目录。 1.2. 运行 go …...
手写Promise
构造器的实现 const PENDING pending; const FULFILLED fulfilled; const REJECTED rejectedclass MyPromise{#state PENDING;#result undefined;constructor(executor){const resolve (data) > {this.#changeState(FULFILLED, data);};const reject (reason) > …...
深度学习云服务器免费使用教程
#云服务器# #深度学习# #人工智能# #计算机视觉# 本文为各位学习深度学习的入门选手而创建,降低深度学习的入门门槛。 谷歌云服务器Colab: T4GPU。限额,需要科学上网,不能使用终端。 谷歌云服务器地址:欢迎使用 C…...
使用ansible的剧本制作salt-master与salt-minion的安装与启动服务过程
虚拟机版本:Rocky Linux release 8.6 (Green Obsidian) 准备几台虚拟机 ipv4地址主机名192.168.137.13center192.168.137.14sp-1192.168.137.15sp-2192.168.137.16sp-3 一、center主机的配置 1.vim /etc/hosts 127.0.0.1 localhost localhost.localdomain loc…...
数据库sqlite3
用数据库函数完成数据的增删改查 增: 将要存储的信息录入到结构体中,再使用snprintf函数信息结合sqlite3命令语句使用sqlite3_exec函数完成插入。 int do_insert(sqlite3 *ppDb) {Worker Work;printf("输入插入的工号:");scanf("%d&qu…...
开发基础之Python 函数(Basic Python Functions for Development)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...
Django_Vue3_ElementUI_Release_001_项目初始化
1. 数据库 1.1 安装 https://blog.csdn.net/rbx508780/article/details/127176754 1.2 创建数据库 1.3 DBeaver可视化数据库 https://dbeaver.io/download/ 2 安装Python(3.9.12) 2.1 下载地址 https://www.python.org/downloads/release/python-3912/ 2.2 设定国内源 pip …...
MySQL之安装与基础知识
目录 一:在centos7上安装MySQL数据库 1.卸载默认存在的环境 2.配置mysql的yum源 3. 安装MySQL 4.登录mysql 5.设置MySQL的配置文件 二:MySQL基础知识 1.什么是数据库 2.主流数据库 3.服务器,数据库,表关系及使用案例 4…...
前端基础 | HTML基础:HTML结构,HTML常见标签
文章目录 HTML1、HTML结构1.1HTML标签1.1.1标签1.1.2标签含义 1.2HTML文件基本结构1.3标签层次结构1.4 快速生成代码框架 2、HTML常见标签2.1注释标签2.2标题标签:h1–h62.3段落标签:p2.4 换行标签:br2.5格式化标签2.6 图片标签:i…...
宏任务和微任务+超全面试真题
概念 微任务和宏任务是在异步编程中经常使用的概念,用于管理任务的执行顺序和优先级。 宏任务:setTimeout, setInterval,I/O 操作和 UI 渲染等。微任务: Promise 回调、async/await等 微任务通常比宏任务具有更高的优先级。 执…...
针对SVM算法初步研究
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝心态决定高度,细节决定成败…...
Java中的`String`不可变性详解
在Java中,String类具有不可变性(immutable),这意味着一旦String对象被创建,它的值将无法更改。所有对字符串的修改操作(如拼接、替换等)实际上都会生成一个新的字符串对象,而不会修改…...
c# SMTP发送邮件
string from ""; string fromAlias "MIS-TC"; string[] to { "" }; string subject "问题提交"; string body sb.ToString(); string ipaddr "smtp.email.qq.com"; int port 25; string credit ""; strin…...
GPU基础 -- 并行化与阿姆达尔定律
并行化与阿姆达尔定律 并行化是将计算任务分割成多个部分,使这些部分能够在多个处理器或核心上同时运行,从而加速任务的完成时间。阿姆达尔定律(Amdahl’s Law)则揭示了并行化所能带来的加速效果的限制。 阿姆达尔定律公式 阿姆…...
Lua热更
Lua 热更 前提 Lua是轻量级,可以解释执行的编程语言、性能好 基本原则 1.场景空 代码控制物体加载释放 2.场景一个 3.节点不手动挂代码 4.AssetsBundle资源管理 5.Lua开发框架 6.调试模式、发布模式 XLua 热更框架 XLua是C#环境下Lua的解决方案 1.Lua虚拟…...
提升汽车行业软件质量:ASPICE培训的关键实践方法
ASPICE(汽车行业软件过程改进和能力确定)培训是一种针对汽车行业软件开发和维护过程的标准化培训。 该培训旨在帮助组织提高其软件开发和维护过程的质量和效率。以下是ASPICE培训的一些最佳实践方法: 1. 理解ASPICE框架:首先&…...
2024 全新智能识别 API 接口震撼登场
近年来,随着人工智能技术的快速发展,智能识别技术逐渐成为了各个领域的热门应用。在这个大背景下,2024 年的全新智能识别 API 接口横空出世,为我们的生活带来了更多的便利。本文将为大家详细介绍这个全新智能识别 API 接口&#x…...
《UniVS: Unified and Universal Video Segmentation with Prompts as Queries》要点提炼
论文来源:https://arxiv.org/abs/2402.18115 《UniVS: Unified and Universal Video Segmentation with Prompts as Queries》是2024CVPR中的一篇关于视频分割的论文, 主要内容: 论文提出了一个名为UniVS的新型统一视频分割架构,…...
LightV虚拟化技术:基于缓存一致性的高效内存管理方案
1. LightV技术背景与核心挑战虚拟化技术在现代计算系统中扮演着越来越重要的角色,从边缘设备到云基础设施都广泛采用。传统虚拟化通过资源抽象和隔离带来了显著优势,但也面临着几个关键瓶颈问题:1.1 传统虚拟化的性能瓶颈当前主流的虚拟化方案…...
第4篇:角色设定与上下文管理——让AI扮演专家
第4篇:角色设定与上下文管理——让AI扮演专家适用人群:进阶 | 字数:约25,000字 | 预计阅读时间:60分钟前言 在前面三篇中,我们完成了"入门三部曲":知道了提示词的本质,学会了黄金四步…...
从LMS到BLMS:自适应滤波的‘批处理’思想如何解决工程中的收敛难题?
从LMS到BLMS:批处理思想如何重塑自适应滤波的工程实践 在实时信号处理领域,工程师们常常面临一个经典困境:算法响应速度与系统稳定性能之间的微妙平衡。想象一下,当你正在调试一套语音降噪系统时,每次麦克风接收到一个…...
别再死记硬背期望公式了!用Python模拟骰子游戏,5分钟搞懂数学期望的底层逻辑
用Python玩转骰子游戏:5分钟可视化理解数学期望 当第一次接触概率论中的"数学期望"概念时,很多人会被公式中的求和符号和概率权重搞得晕头转向。但如果我们换一种方式——用Python代码模拟掷骰子游戏,这个抽象概念立刻会变得生动起…...
从开发板到工业边缘计算平台:UP Board二代的硬件解析与应用实战
1. 项目概述:从“开发板”到“边缘计算平台”的认知跃迁最近在整理手头的嵌入式设备,翻出了这块研扬的UP Board二代。说实话,第一次拿到它的时候,我下意识地还是把它归类为“一块性能不错的x86开发板”,就像树莓派之于…...
2026年AI数字人产量有上限吗?批量制作全揭秘
2026年AI数字人产量有上限吗?批量制作全揭秘 【导语】 用AI数字人做视频,一天到底能产多少条?是24小时不停机吗?批量制作有没有数量限制?这些问题,今天一次说清楚。01 AI数字人的产量到底有没有上限&#x…...
接入 Taotoken 后从账单明细中分析各阶段模型使用占比与成本变化
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 接入 Taotoken 后从账单明细中分析各阶段模型使用占比与成本变化 在项目开发中引入大模型能力后,一个常见的困惑是&…...
CircuitJS1:浏览器中的电子电路仿真神器完全指南
CircuitJS1:浏览器中的电子电路仿真神器完全指南 【免费下载链接】circuitjs1 Electronic Circuit Simulator in the Browser 项目地址: https://gitcode.com/gh_mirrors/ci/circuitjs1 想要学习电子电路却苦于没有实验设备?需要验证电路设计却不…...
FFXIV TexTools终极指南:5步轻松掌握《最终幻想14》模组制作与安装
FFXIV TexTools终极指南:5步轻松掌握《最终幻想14》模组制作与安装 【免费下载链接】FFXIV_TexTools_UI 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_TexTools_UI 你是否曾经梦想过在《最终幻想14》中拥有独一无二的角色外观?想要定制专…...
GitLab团队协作实战:从分支策略到CI/CD流水线优化指南
1. 项目概述:为什么需要一个专属的GitLab使用指导?在团队协作开发中,版本控制系统是基石,而GitLab作为集代码托管、CI/CD、项目管理于一体的DevOps平台,其重要性不言而喻。然而,对于许多新加入团队的开发者…...
