QT : 完成绘制时钟
1.头文件
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPainter>
#include <QTimer>
#include <QTime>
#include <QPaintEvent>
#include <QDebug>
#include <QBrush>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 updateTime();private:Ui::Widget *ui;QTimer *timer;QPixmap dial;
};
#endif // WIDGET_H
2.源文件
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setFixedSize(600,600);QTimer *timer = new QTimer(this);connect(timer,&QTimer::timeout,this,&Widget::updateTime);timer->start(1000);this->setStyleSheet("background-color:white;");
}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);//实例化一个画家QPainter painter(this);//设置绘图器(QPainter)的渲染提示,开启抗锯齿效果painter.setRenderHint(QPainter::Antialiasing);//获取当前时间QTime currentTime = QTime::currentTime();int X=this->width()/2;int Y=this->height()/2;int radius=200;//绘制表盘painter.setPen(QPen(Qt::black,7)); //设置笔if(dial.isNull()){dial.load("E:\\clock.png");}if(!dial.isNull()){painter.drawPixmap(X-radius,Y-radius,radius*2,radius*2,dial);}//绘制时针painter.save(); // 保存当前的绘制状态painter.translate(X,Y); // 将绘制的坐标原点移动到表盘的中心int hour = currentTime.hour(); // 获取当前的小时int minute = currentTime.minute(); // 获取当前的分钟double hourAngle = (hour%12 + minute/60.0)*30.0; // 计算时针的角度,考虑分钟对时针的影响painter.rotate(-90); // 将坐标系旋转,使12点位置对应0度painter.rotate(hourAngle); // 旋转坐标系,使时针指向正确的位置painter.setPen(QPen(Qt::black,5)); //设置笔painter.drawLine(0,0,0,-radius*0.5); // 绘制时针,起点是坐标原点 (0, 0),终点是时针的末端位置painter.restore(); // 恢复之前保存的绘制状态,以便后续绘制//绘制分针painter.save();painter.translate(X,Y);double minuteAngle = minute*6.0;painter.rotate(-90);painter.rotate(minuteAngle);painter.setPen(QPen(Qt::red,3)); //设置笔painter.drawLine(0,0,0,-radius*0.7);painter.restore();//绘制秒针painter.save();painter.translate(X,Y);int second = currentTime.second();double secondAngle = second * 6.0;painter.rotate(-90);painter.rotate(secondAngle);painter.setPen(QPen(Qt::blue,2)); //设置笔painter.drawLine(0,0,0,-radius*0.9);painter.restore();}void Widget::updateTime()
{update();
}
相关文章:
QT : 完成绘制时钟
1.头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QTimer> #include <QTime> #include <QPaintEvent> #include <QDebug> #include <QBrush>QT_BEGIN_NAMESPACE namespace Ui { class…...
香港云服务器和日本云服务器哪个好?(详细对比)
购置海外服务器时,您是在乎网络速度?价格?稳定性?当这几个因素同时存在,我们该如何选择?本篇针对海外热门的两个地区,中国香港和日本,这两种云服务器谁优谁劣?各有什么亮点?逐一进行对比分析。 一、速度上来看 中国香…...
Cross Attention和 Self- Attention 的区别?
Cross Attention和Self-Attention都是深度学习中常用的注意力机制,用于处理序列数据,其中Self-Attention用于计算输入序列中每个元素之间的关系,Cross Attention则是计算两个不同序列中的元素之间的关系。它们的主要区别在于计算注意力分数时…...
《从零开始的Java世界》02面向对象(基础)
《从零开始的Java世界》系列主要讲解Javase部分,从最简单的程序设计到面向对象编程,再到异常处理、常用API的使用,最后到注解、反射,涵盖Java基础所需的所有知识点。学习者应该从学会如何使用,到知道其实现原理全方位式…...
pve关闭windows虚拟机慢
背景: 在web界面关闭windows虚拟机一直转圈,使用命令行关闭报错 qm stop 155 trying to acquire lock... cant lock file /var/lock/qemu-server/lock-155.conf - got timeout解决 删除lock,然后用命令行重新关闭 rm /var/lock/qemu-serve…...
【Django】 rest_framework接口开发流程及接口功能组成
rest_framework接口开发流程及接口功能组成 使用restframework框架开发接口,方式应该有6、7种,每个人的习惯不同,用的方法也不一样,再次不再一一详述。 我比较常用:ModelSerializerGenericAPIView 原因是用视图函数装饰…...
Kafka Log存储解析以及索引机制
1.概述 在Kafka架构,不管是生产者Producer还是消费者Consumer面向的都是Topic。Topic是逻辑上的概念,而Partition是物理上的概念。每个Partition逻辑上对应一个log文件,该log文件存储是Producer生产的数据。Producer生产的数据被不断追加到该…...
广告电商模式:探索新商业模式,实现三方共赢
随着互联网技术的发展,电商行业正在不断探索新的商业模式。其中,广告电商模式是一种创新的方式,它成功地将广告和电商相结合,实现了三方共赢的局面。一、广告电商模式的定义广告电商模式,顾名思义,是一种将…...
动态线程池框架DynamicTp v1.1.4大版本发布,新增若干实用特性
DynamicTp 简介 DynamicTp 是一个基于配置中心实现的轻量级动态线程池监控管理工具,主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。 DynamicTp 特性 代码零侵入:我们改变了线程池以往的使用姿势,所有配置均放…...
无线通信——Mesh自组网的多跳性
Mesh的多跳性 Mesh网络具备多跳性。什么是多跳性呢?上面说过,每一个具备Mesh网络的设备都是独立的节点。因此,当我发出一条数据时,这些数据会通过跳跃到达不同的网络节点,数据从一个节点跳到另一个节点,直到…...
QA 云计算实验问题汇总
Q Win11中VMware虚拟网卡有感叹号 2023-9-27一位同学的win11的两个VMware17的虚拟网卡都有感叹号 A 清除注册表 步骤1 关闭VMWare虚拟化软件 步骤2 使用CCleaner pro 清理注册表 步骤3 重启系统 步骤4 VMware虚拟网卡上的感叹号消失。 Q Win11上的VisualBox的网卡消失了…...
VEX —— Functions|Groups
目录 expandpointgroup —— 返回点组内点号 expandprimgroup —— 返回面组内面号 expandvertexgroup —— 返回顶点组内顶点号 inpointgroup —— 判断指定点是否在点组内 inprimgroup —— 判断指定面是否在面组内 invertexgroup —— 判断指定顶点是否在顶点组内 np…...
JavaSE18——接口
接口(interface) 1 概述 在Java中,接口是一种抽象数据类型,它定义了一组方法(没有方法体),但没有实现这些方法的具体代码。接口可以看作是一种合约,它规定了类应该具有的行为。类可以实现一个或多个接口&…...
杭州亚运会开幕式惊现数字人火炬手,动捕设备迸发动画制作新动能
在第十九届亚运会开幕式上,首次出现了“数字人”点火形式,打造了亚运史上首个数字点火仪式,这种点火方式是一种颠覆性创作的同时,这也是裸眼3D技术、现实增强和AI人工智能技术的完美结合。 此次数字火炬手的背后是采用了动捕设备&…...
ptmalloc源码分析 - malloc/free函数的实战篇(12)
目录 一、chunk的大小实验 二、获取使用中的chunk信息的实验 三、小内存块尝试获取fd信息的实验 四、常用malloc/free函数使用注意事项 看了前面11章节的内容,我们也基本了解了ptmalloc的内存管理逻辑。此处也可以通过一些手段,获取到chunk的信息&am…...
博弈论(奇偶考虑法)+计数+DP(判定转dp):CF838C
首先题目有博弈,先分析一波最优策略(步骤:分析性质)。 两个人,所以显然考虑奇偶考虑法递归考虑。 首先删就是使子问题-1,重新排列是在当前子问题里的。 一个串的排列是有限的,所以这里就可以…...
郁金香2021年游戏辅助技术中级班(一)
郁金香2021年游戏辅助技术中级班(一) 用代码读取utf8名字字节数组搜索UTF-8字符串 用CE和xdbg分析对象名字从LUA函数的角度进行分析复习怪物名字偏移 用CE和xdbg分析对象数组认识虚函数表分析对象数组 分析对象数组链表部分链表的定义链表的数据在内存里…...
加密货币交易所偿付能力的零知识证明
如何检测下一个 FTX 和 Mt. Gox 加密货币交易所 FTX 的内爆导致数十亿客户资金流失,这是加密货币历史上交易所破产的最新例子。历史可以追溯到 2014 年,当时处理 70% 比特币交易的历史最悠久、规模最大的交易所 Mt. Gox 丢失了用户的 850,000 个比特币。…...
软考网络工程师防火墙配置考点总结
(考试重点) 一、访问控制列表 管理网络当中的数据流量,实现数据过滤的重要手段。可以在路由器、三层交换、二层交换和防火墙上实现。 隐藏规则:当前面的规则都匹配不上,华为默认允许,思科默认拒绝。 分…...
【IDEA】idea恢复pom.xml文件显示灰色并带有删除线
通过idea打开spring boot项目后,发现每个服务中的pom.xml文件显示灰色并带有删除线,下面为解决方案 问题截图 解决方案 打开file——settings——build,execution,deployment——Ignored Files,把pom.xml前面的复选框去掉,去掉之…...
国内免费AI编程工具推荐
DeepSeek Code 由深度求索公司开发,支持代码生成、补全和错误检测,涵盖Python、Java等多种语言,提供网页版和插件形式。CodeGeeX 清华大学团队推出的多语言代码生成工具,支持VS Code等IDE插件,具备代码翻译和解释功能。…...
如何用Qlib快速打造你的AI量化交易系统:新手完整指南
如何用Qlib快速打造你的AI量化交易系统:新手完整指南 【免费下载链接】qlib Qlib 是一个面向人工智能的量化投资平台,其目标是通过在量化投资中运用AI技术来发掘潜力、赋能研究并创造价值,从探索投资策略到实现产品化部署。该平台支持多种机器…...
Vue项目中优雅集成turn.js实现3D翻书特效
1. 为什么选择turn.js实现3D翻书效果 第一次在产品手册里看到3D翻页效果时,那种纸张自然弯曲的物理质感让我眼前一亮。作为从业十年的前端开发者,我测试过多种实现方案:纯CSS的transform虽然简单,但缺少页面厚度和阴影细节&#…...
ANIMATEDIFF PRO性能对比:Ubuntu与Windows系统基准测试
ANIMATEDIFF PRO性能对比:Ubuntu与Windows系统基准测试 同样的硬件,不同的系统,AI视频生成性能究竟有多大差异? 作为一名长期从事AI视频生成的技术从业者,我经常被问到一个问题:在Ubuntu和Windows系统上运行…...
【obs studio】从零开始:高效录制屏幕与声音的完整指南
1. 为什么选择OBS Studio录制屏幕与声音? 如果你正在寻找一款免费、开源且功能强大的屏幕录制工具,OBS Studio绝对是你的不二之选。我最初接触这款软件是因为需要录制一些技术教程,试过市面上不少付费软件后,发现OBS Studio不仅完…...
BGE-M3快速入门:多语言文本相似度分析从零到一
BGE-M3快速入门:多语言文本相似度分析从零到一 1. 引言:从“关键词匹配”到“语义理解” 你有没有遇到过这样的场景?在搜索引擎里输入“苹果”,结果既出现了水果,也出现了手机公司。或者,你想找“如何学习…...
Aspose.Words避坑指南:Java实现Word转PDF时如何去除水印(2023最新版)
Aspose.Words商业应用实战:Java版Word转PDF无水印解决方案深度解析 在企业级文档处理系统中,Word到PDF的转换需求几乎无处不在——合同归档、报告生成、电子发票导出等场景都依赖这一基础功能。作为Java开发者,当我们选择Aspose.Words这一业界…...
J-Link驱动签名被拦?手把手教你用WHQL签名驱动搞定Windows 11安全策略
J-Link驱动签名被拦?手把手教你用WHQL签名驱动搞定Windows 11安全策略 最近在帮团队调试一批新的STM32H7开发板时,遇到了一个令人头疼的问题:明明上周还能正常使用的J-Link调试器,在新的Windows 11企业版电脑上突然无法识别了。设…...
OpenClaw+GLM-4.7-Flash低成本方案:自建模型替代SaaS API
OpenClawGLM-4.7-Flash低成本方案:自建模型替代SaaS API 1. 为什么选择自建模型替代商业API 去年夏天,当我第一次尝试用OpenClaw自动化处理公司周报时,被OpenAI的API账单吓了一跳——简单的文档整理和摘要生成,一个月竟然消耗了…...
告别数据丢失!GD32串口DMA双缓冲+内存对齐配置避坑指南
GD32串口DMA双缓冲与内存对齐实战:工业级数据零丢失方案 在工业自动化、高速数据采集等场景中,串口通信的稳定性和效率直接关系到整个系统的可靠性。当波特率提升到921600甚至更高时,传统的轮询或中断方式往往难以应对持续的数据流࿰…...
