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

《QT实用小工具·五十三》会跑走的按钮

1、概述
源码放在文章末尾

该项目实现了会逃跑的按钮:

两个按钮,一个为普通按钮,另一个为会跑走的按钮

鼠标移到上面时,立刻跑掉

针对鼠标、键盘、触屏进行优化

随机交换两个按钮的文字、偶尔钻到另一个按钮下面、鼠标移开自动重置到原来状态

项目demo演示如下:
在这里插入图片描述

项目部分代码如下所示:

#ifndef ESCAPEDIALOG_H
#define ESCAPEDIALOG_H#include <QObject>
#include <QDialog>
#include <QLabel>
#include <QVBoxLayout>
#include <QDateTime>
#include <random>
#include <QDebug>
#include <QPropertyAnimation>
#include <QTimer>
#include <QKeyEvent>
#include "hoverbutton.h"class EscapeDialog : public QDialog
{
#define MARGIN 20Q_OBJECT
public:EscapeDialog(QString title, QString msg, QString esc, QString nor, QWidget* parent = nullptr);protected:void resizeEvent(QResizeEvent *event) override;void leaveEvent(QEvent* event) override;private:void resetBtnPos();void recoverEscBtnPos();void moveEscBtnAni(QPoint aim);qint64 getTimestamp();int getRandom(int min, int max);bool isEqual(int a, int b);public slots:void slotPosEntered(QPoint point);           // 鼠标进入事件:移动按钮或者交换按钮void slotEscapeButton(QPoint p = QPoint());  // 移动按钮void slotExchangeButton();                   // 交换按钮private:QLabel* msg_lab;HoverButton* esc_btn/*accept*/, *nor_btn/*reject*/;std::random_device rd;std::mt19937 mt;bool exchanged; // 两个按钮是否交换了位置int escape_count; // 跑动的次数(包括交换)int last_escape_index; // 上次交换位置的次数(免得经常性的交换)bool has_overlapped; // 是否和另一个按钮进行重叠
};#endif // ESCAPEDIALOG_H

源码下载

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

相关文章:

  • Servlet的几种用法?
  • Golang | Leetcode Golang题解之第69题x的平方根
  • AR人脸美妆SDK解决方案,让妆容更加贴合个人风格
  • Python-100-Days: Day09 Object-oriented programming(OOP) Upgrade
  • 虹科Pico汽车示波器 | 免拆诊断案例 | 2010款凯迪拉克SRX车发动机无法起动
  • ECC 号码总结
  • 《大疆二次开发》EMQX和MQTT部署
  • 【网络】滑动窗口和拥塞窗口
  • 数据库知识初步汇总
  • Moby简介:openEuler 中的开源docker引擎
  • 分布式光纤测温DTS的测温范围是多少?
  • Java实现裁剪PDF
  • ZooKeeper以及DolphinScheduler的用法
  • gitlab集群高可用架构拆分部署
  • STC8增强型单片机开发day01
  • 记录: Python解析yml文件,顺序解析,带所有文件等号
  • Npm Install Docusaurus Demo【npm 安装 docusaurus 实践 】
  • 【工具推荐定制开发】一款轻量的批量web请求命令行工具支持全平台:hey,基本安装、配置、使用
  • Linux进程——进程的创建(fork的原理)
  • ICode国际青少年编程竞赛- Python-1级训练场-路线规划
  • uniapp微信小程序1rpx border在某些手机机型上边框显示不出来解决方案
  • Linux mkfs.ext2命令教程:如何创建ext2文件系统(附实例详解和注意事项)
  • 基于Springboot的校园招聘系统(有报告)。Javaee项目,springboot项目。
  • 将 Vue、React、Angular、HTML 等一键打包成 macOS 和 Windows 平台客户端应用
  • 使用 MobaXterm 链接 Ubuntu(Windows子系统)
  • QT设计模式:代理模式
  • 独热编码One-Hot是什么?在实际应用中具体是如何存储的?
  • 计算机视觉与深度学习实战之以Python为工具:基于GUI搭建通用视频处理工具
  • 18.Docker学习
  • 树莓派4b红外检测