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

Qt—鼠标移动事件的趣味小程序:会移动的按钮

1.项目目标

本次根据Qt的鼠标移动事件实现一个趣味小程序:当鼠标移动到按钮时,按钮就会随机出现在置,以至于根本点击不到按钮。​​​​​

 2.项目步骤

首先现在ui界面设计控件(也可以用代码的方式创建,就不多说了)

第一个按钮不需要移动,所以点击它后只需要一个简单的槽函数把QLabel的文本更改一下即可。 

 接下来重点是第二个按钮,如何实现它的随机移动从而让鼠标点击不到呢?这个时候就可以用到鼠标移动事件了。当鼠标移动到按钮中,按钮会随机移动,所以我们还需要qrand来进行随机数的设置。

由于是对按钮进行鼠标移动事件,所以我们需要一个继承按钮的类来进行相关设置。

 在完成基本配置后,就可以进行后续操作了。接下来就是添加鼠标移动事件的函数了

//在.h文件中添加如下声明代码,点击改行代码按住alt+F4自动给.cpp添加定义代码void mouseMoveEvent(QMouseEvent* event);//鼠标移动事件

 

还需要注意的一点是此时并不是真正的随机,所以还需要设置随机数种子,把它设置为当前时间 。

设置完毕后我们运行代码,发现按钮并不会移动,因为我们还没指定某一个按钮去移动它,所以我们需要把第二个按钮的类设置为我们刚刚创建好的类。

 

 此时再运行程序,按钮会移动,成功。

3.代码展示

 因为主界面没什么改变,只添加了一个槽函数,所以不展示了,只展示MyEven.h和MyEvent.cpp

//MyEvent.h#ifndef MYEVENT_H
#define MYEVENT_H#include <QWidget>
#include <QPushButton>class MyEvent : public QPushButton
{Q_OBJECT
public:explicit MyEvent(QWidget *parent = nullptr);void mouseMoveEvent(QMouseEvent* event);//鼠标移动事件signals:};#endif // MYEVENT_H
//MyEvent.cpp#include <QTime>MyEvent::MyEvent(QWidget *parent) : QPushButton(parent)
{setMouseTracking(true);qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));//设置为按当前时间
}void MyEvent::mouseMoveEvent(QMouseEvent* event)
{int current_x=this->x();//获取按钮的x轴坐标int current_y=this->y();//获取按钮的轴坐标int mouse_x=event->x();//获取鼠标的x轴坐标int mouse_y=event->y();//获取鼠标的y轴坐标if((current_x+mouse_x>=mouse_x)&&(current_x+mouse_x<=current_x+this->width())){if((current_y+mouse_y>=current_y)&&(current_y+mouse_y<=current_y+this->height())){//按钮应该在父容器里面移动,不能超出QWidget *parent=this->parentWidget();//获取父类,也就是QWidget对象//取x轴和y轴的随机值int btn_x=qrand()%(parent->width()-this->width());int btn_y=qrand()%(parent->height()-this->height());this->move(btn_x,btn_y);}}
}

 

相关文章:

  • 2025最新vmware-17虚拟机安装教程(保姆级,图文讲解,带安装包)
  • MySQL基础关键_009_DDL 和 DML(二)
  • 多线程2-多线程编程
  • 【Fifty Project - D23】
  • 从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 7 |TinyML 定位:深度模型在 MCU 上的部署
  • 扩增子分析|微生物生态网络稳定性评估之鲁棒性(Robustness)和易损性(Vulnerability)在R中实现
  • Jetpack Compose 自定义 Slider 完全指南
  • Javase 基础加强 —— 05 Map集合
  • 图形化编程重塑 IoT 边缘开发:技术革新与生态竞合新范式
  • WebRTC ICE 服务器搭建
  • 【KWDB创作者计划】_通过一篇文章了解什么是 KWDB(KaiwuDB)
  • 【Docker系列】使用格式化输出与排序技巧
  • 【旅游网站设计与实现】基于SpringBoot + Vue 的前后端分离项目 | 万字详细文档 + 源码 + 数据库 + PPT
  • SQLite基本函数
  • 在 PyTorch 中借助 GloVe 词嵌入完成情感分析
  • Linux进程8-共享内存概念机操作、shmget/shmat/shmdt/shmctl函数用法、空间大小修改
  • 普通IT的股票交易成长史--20250506午复盘
  • JVM内存模型深度解剖:分代策略、元空间与GC调优实战
  • JVM——垃圾回收
  • git的push.default配置详解
  • 市场监管总局发布《城镇房屋租赁合同(示范文本)》
  • 当AI开始谋财害命:从骗钱到卖假药,人类该如何防范?
  • 市值增22倍,巴菲特30年重仓股盘点
  • 商务部:外贸优品中华行活动采购意向超167亿元
  • 全国铁路旅客发送量连续3天同比增幅超10%,今日预计发送1800万人次
  • 魔都眼|咖啡节上小孩儿忍不住尝了咖啡香,母亲乐了