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

Qt事件学习案例

视频链接

https://www.bilibili.com/video/BV18B4y1K7Cs?p=7&spm_id_from=pageDriver&vd_source=fa4ef8f26ae084f9b5f70a5f87e9e41b

Qt5跟着视频做即可,Qt6部分代码需要改动,改动的地方注释有写

素材

百度云

链接:https://pan.baidu.com/s/158jQbAmv0Y3JipAw-tl9ng 
提取码:subw

实现一个类似屏幕保护的效果(具体效果看视频)

代码

butterfly.h文件

#ifndef BUTTERFLY_H
#define BUTTERFLY_H#include <QWidget>class Butterfly : public QWidget
{Q_OBJECT
public:explicit Butterfly(QWidget *parent = nullptr);//封装void fly();//重载fly,处理方法很多,也可以直接加上默认参数,能实现功能就行void fly(int min,int max);signals:protected:void paintEvent(QPaintEvent *ev);void timerEvent(QTimerEvent *ev);void mousePressEvent(QMouseEvent* ev);void mouseMoveEvent(QMouseEvent* ev);void enterEvent(QEvent* ev);private:QPixmap m_pixmap;int m_indexPic = 1;//用于描述图片名字QPoint m_pt;
};#endif // BUTTERFLY_H

butterfly.cpp文件

#include "butterfly.h"
#include <QPaintEvent>
#include <QPainter>
#include <QMouseEvent>
#include <QRandomGenerator>
#include <QApplication>Butterfly::Butterfly(QWidget *parent): QWidget{parent}
{m_pixmap.load(":/1");setFixedSize(m_pixmap.size());//启动定时器startTimer(100);
}void Butterfly::fly()
{fly(10,30);
}void Butterfly::fly(int min, int max)
{m_indexPic++;if (m_indexPic > 2){m_indexPic = 1;}//构造图片路径QString name = QString(":/%1").arg(m_indexPic);m_pixmap.load(name);update();//蝴蝶移动的步长10 -29的随机数int stepX = QRandomGenerator::global()->bounded(min,max);int stepY = QRandomGenerator::global()->bounded(min,max);int curX = this->geometry().topLeft().x() + stepX;int curY = this->geometry().topLeft().y() + stepY;//Qt6没有视频中的方法,要换成这样写QRect screenRect=QGuiApplication::primaryScreen()->geometry();if (curX >= screenRect.right()){curX = screenRect.left();}if (curY >= screenRect.bottom()){curY = screenRect.top();}move(curX,curY);
}void Butterfly::paintEvent(QPaintEvent *ev)
{QPainter painter(this);painter.drawPixmap(rect(),m_pixmap);
}void Butterfly::timerEvent(QTimerEvent *ev)
{fly();
}void Butterfly::mousePressEvent(QMouseEvent *ev)
{if (ev->button() == Qt::LeftButton){m_pt = ev->globalPos() - this->geometry().topLeft();}
}void Butterfly::mouseMoveEvent(QMouseEvent *ev)
{/*ev>buttons 返回值是一些二进制值,每个二进制值对应鼠标的一个键位,* 如果两个二进制按位与返回1,则是同一个键位,否则不是*/if (ev->buttons() & Qt::LeftButton){this->move(ev->globalPos() - m_pt);}
}void Butterfly::enterEvent(QEvent *ev)
{fly(-200,200);
}

运行结果

在这里插入图片描述

部分代码解释:

QMouseEvent::buttons返回值是各种二进制数,每个二进制数对应的就是一个鼠标键位。如果两个二进制按位与返回1,则是同一个键位,否则不是
在这里插入图片描述

相关文章:

Qt事件学习案例

视频链接 https://www.bilibili.com/video/BV18B4y1K7Cs?p7&spm_id_frompageDriver&vd_sourcefa4ef8f26ae084f9b5f70a5f87e9e41bQt5跟着视频做即可&#xff0c;Qt6部分代码需要改动,改动的地方注释有写 素材 百度云 链接&#xff1a;https://pan.baidu.com/s/158j…...

无锡国家集成电路设计中心某公司的单锂小电机直流电机H桥驱动电路

H桥驱动 L9110S是一款直流电机驱动电路&#xff0c;适合单节锂电池应用。输出电流0.4A。价格约3毛。 推荐原因&#xff1a; 某些人应该知道这个地方&#xff0c;大多数人应该不知道这个地方&#xff0c;所以推荐一下。 这个地方去过几次&#xff0c;某公司与某方走的“近”&…...

数据分析 -- numpy

文章目录 numpy库简介简介特点 numpy操作数组创建数组属性数组变更数据计算 numpy库简介 简介 开源的Python库&#xff0c;它提供了高性能的多维数值&#xff08;numpy.ndarray&#xff09;计算能力&#xff1b;由“Numerical Python”缩写而来&#xff0c;并且它是Pandas库的…...

开源项目生存现况:xz投毒事件引发的思考与GNU tar维护挑战

&#xff08;首发地址&#xff1a;学习日记 https://www.learndiary.com/2024/04/xz-tar/&#xff09; 嗨&#xff0c;大家好&#xff01;我是来自淘宝网“学习日记小店”的 learndiary&#xff0c;专注于 Linux 服务领域。今天我要和大家谈谈近期备受瞩目的 XZ 供应链投毒事件…...

前端开发语言有哪些

随着互联网的迅猛发展&#xff0c;前端开发已经成为了一个炙手可热的职业。对于初学者来说&#xff0c;了解前端开发所使用的语言是非常重要的。那么&#xff0c;前端开发语言有哪些呢&#xff1f;本文将为您一一介绍。 一、HTML HTML&#xff08;HyperText Markup Language&…...

速盾:cdn加速https额外收费吗?

CDN&#xff08;内容分发网络&#xff09;是一种通过在全球各地部署服务器来提供高速互联网内容传输的技术&#xff0c;它可以加速网站的访问速度&#xff0c;提高用户体验。而HTTPS&#xff08;超文本传输安全协议&#xff09;是一种通过加密技术保护网站数据传输安全的协议。…...

【蓝桥杯嵌入式】13届程序题刷题记录及反思

一、题目分析 考察内容&#xff1a; led按键&#xff08;短按&#xff09;PWM输出&#xff08;PA1&#xff09;串口接收lcd显示 根据PWM输出占空比调节&#xff0c;高频与低频切换 串口接收&#xff08;指令解析&#xff09;【中断接收】 2个显示界面 led灯闪烁定时器 二…...

C++类 单例模式

例子 请看如下的类和调用&#xff1a; 在您提供的代码片段中&#xff0c;CPathPlanMan 类使用了一个单例模式&#xff0c;这意味着这个类只需要一个实例&#xff0c;并且提供了全局访问点来获取这个实例。这通常用于控制对一个类实例的访问&#xff0c;尤其是在创建实例代价昂…...

prompt 工程案例

目录 prompt 工程是什么&#xff1f; 案例 vllm 推理加速框架 prompt 工程是什么&#xff1f; prompt&#xff1a;提示词&#xff0c;也就是我们使用网页版输入给大模型的内容就叫 prompt&#xff0c;那什么是 prompt 工程呢&#xff1f; 简单理解其实就是利用编写的 prom…...

燃气管网安全运行监测系统功能介绍

燃气管网&#xff0c;作为城市基础设施的重要组成部分&#xff0c;其安全运行直接关系到居民的生命财产安全和城市的稳定发展。然而&#xff0c;随着城市规模的不断扩大和燃气使用量的增加&#xff0c;燃气管网的安全运行面临着越来越大的挑战。为了应对这些挑战&#xff0c;燃…...

正则表达式(2)

文章目录 专栏导读1、贪婪与非贪婪2、转义匹配 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN 数据分析领域优质创作者&#xff0c;专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》&#xff0c;本专栏针对大学生、初级数据分析工程师精…...

xv6源码分析 001

xv6源码分析 001 我们先看看xv6这个项目的基本结构&#xff08;只看代码部分&#xff09; 主要就是两个目录kernel 和 user。 user是一些用户程序&#xff0c;也就是我们平时在shell上面执行的命令&#xff0c;每执行一个命令就会创建一个新的用户进程来执行这个命令 在user目…...

90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装)

目录 摘要...

JS代码小知识(个人向)

JS 对象转数组 let obj {0:"a",1:"b",length:2 //加上这个就能转了 }; console.log(Array.from(obj)); // ["a", "b"] 数组的拼接 let a ["a","b"] let b ["c","d"] let c [...a , …...

MC34119

这份文件是关于MC34119线性集成电路的产品规格说明书&#xff0c;由Unisonic Technologies Co., Ltd生产。MC34119是一款低功耗音频放大器IC&#xff0c;主要用于电话应用&#xff0c;如扬声器电话。以下是该文件的核心内容概要&#xff1a; 产品描述&#xff1a; MC34119是一款…...

RabbitMQ3.13.x之十_流过滤的内部结构设计与实现

RabbitMQ3.13.x之十_流过滤的内部结构设计与实现 文章目录 RabbitMQ3.13.x之十_流过滤的内部结构设计与实现1. 概念1. 消息发布2. 消息消费 2. 流的结构1. 在代理端进行过滤2. 客户端筛选3. JavaAPI示例4. 流过滤配置5. AMQP上的流过滤6. 总结 3. 相关链接 1. 概念 流过滤的思…...

Node爬虫:原理简介

在数字化时代&#xff0c;网络爬虫作为一种自动化收集和分析网络数据的技术&#xff0c;得到了广泛的应用。Node.js&#xff0c;以其异步I/O模型和事件驱动的特性&#xff0c;成为实现高效爬虫的理想选择。然而&#xff0c;爬虫在收集数据时&#xff0c;往往面临着诸如反爬虫机…...

Python如何解决“滑动拼图”验证码(8)

前言 本文是该专栏的第67篇,后面会持续分享python爬虫干货知识,记得关注。 做过爬虫项目的同学,或多或少都会接触到一些需要解决验证码才能正常获取数据的平台。 在本专栏之前的文章中,笔者有详细介绍通过python来解决多种“验证码”(点选验证,图文验证,滑块验证,滑块…...

MongoDB 启动异常

Failed to start up WiredTiger under any compatibility version. 解决方案: 删除WiredTiger.lock 和 mongod.lock两个文件&#xff0c;在重新启动。回重新生成新的文件。...

mysql 常见数据处理 dml

学习完&#xff0c;mysql正则表达式查询&#xff0c;把常见的数据处理&#xff0c;做一个汇总&#xff0c;便于查看。 数据操纵语言&#xff08;Data Manipulation Language, DML&#xff09;。 1&#xff0c;新增数据&#xff1a; 1&#xff0c;单个插入&#xff1a; insert…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...