《QT实用小工具·四十七》可交互的创意动态按钮

2024-04-29 21:36

本文主要是介绍《QT实用小工具·四十七》可交互的创意动态按钮,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

该项目实现了可交互的创意动态按钮,包含如下功能:
所有颜色自定义
鼠标悬浮渐变
两种点击效果:鼠标点击渐变 / 水波纹动画(可多层波纹叠加)
额外鼠标移入/移出/按下/弹起的实时/延迟共8种事件
鼠标悬浮图标位置主动变化
鼠标拖动图标抖动反弹效果
鼠标进入父控件时开启出现效果,或启动时出现
延迟出现的动画效果(多个按钮连续)
记录开关状态
直接设置 x、y 的圆角显示
边框颜色设置
禁用时半透明+点击穿透效果
添加额外的边缘角标
三种前景模式:图标、文字、带遮罩的图标(任意变色)
支持QSS直接设置部分属性
与父类 QPushButton 兼容
时间准确性:根据时间戳计算动画进度,即使在低性能机器上也可准时完成动画
稳定性:一按钮多功能,完美兼容多种情况下焦点事件
极其强大的可扩展性,继承该按钮后可任意修改显示效果和动画效果

项目demo演示如下所示:
在这里插入图片描述
项目部分代码如下所示:

// 设置文本(同QPushButton)
void setText(QString text);// 设置Icon
void setIcon(QIcon icon);// 设置Pixmap,会根据 icon_color 自动变色
void setPixmap(QPixmap pixmap);// 设置额外扩展的角标,比如右边扩展小箭头、右上角标签、左边图标等
virtual void setPaintAddin(QPixmap pixmap, Qt::Alignment align = Qt::AlignRight, QSize size = QSize(0, 0));// 调整各种动画时长
void setHoverAniDuration(int d);
void setPressAniDuration(int d);
void setClickAniDuration(int d);
void setWaterAniDuration(int press, int release, int finish);
// 是否启用水波纹,false则改为渐变
void setWaterRipple(bool enable = true);
void setJitterAni(bool enable = true);// 设置无交互时的背景颜色
void setBgColor(QColor bg);
// 设置hover和press两种状态的背景颜色,与背景叠加
// press会和hover以及默认背景再叠加
void setBgColor(QColor hover, QColor press);
// 单独设置各种颜色
void setNormalColor(QColor color);
void setBorderColor(QColor color);
void setHoverColor(QColor color);
void setPressColor(QColor color);// 设置前景颜色
void setIconColor(QColor color = QColor(0, 0, 0));
void setTextColor(QColor color = QColor(0, 0, 0));
void setFocusBg(QColor color);
void setFocusBorder(QColor color);// 设置字体大小
// 如果已设置 setTextDynamicSize(true),那么会有改变动画
void setFontSize(int f);// 前景对齐方式
void setAlign(Qt::Alignment a);// 设置圆角
void setRadius(int r);
void setRadius(int rx, int ry);// 设置边界宽度(默认0,透明)
void setBorderWidth(int x);// 分别设置四周空白
void setPaddings(int l, int r, int t, int b);
// 设置水平、垂直空白
void setPaddings(int h, int v);
// 设置四周相同的空白
void setPaddings(int x);
// 设置图标边缘空白比例,0~0.5,越大越空
void setIconPaddingProper(double x);// 设置鼠标交互时前景(文字/图标)会不会动
void setFixedForePos(bool f = true);
// 设置固定大小;并且会自动选取合适的最小值(adjustMinimumSize())
void setFixedForeSize(bool f = true, int paddings = 0);
// 设置为正方形(以高度为准)
void setSquareSize();// 修改字体时是否显示动画
void setTextDynamicSize(bool d = true);// 设置鼠标单击松开后是否当做移开
// 点击出现菜单的按钮必须设置
void setLeaveAfterClick(bool l = true);// 启用双击,会响应双击事件,但是单击会有延迟
void setDoubleClicked(bool e = true);// 动画时是否自动设置文字的颜色,针对派生类的设置,不一定有效
void setAutoTextColor(bool a = true);// 临时屏蔽hover事件,需要手动关闭(set true->操作->set false)
// 比如出现动画,如果一开始鼠标在按钮上,按钮移开,但是hover效果还在,直到鼠标动
void setBlockHover(bool b = true);// 鼠标进入按钮区域,前景图标从对面方向缩放出现
void setShowAni(bool enable = true);
// 前景从中心点出现的缩放动画
void showForeground();
// 前景从该点对面出现的动画
void showForeground2(QPoint point = QPoint(0, 0));
// 隐藏前景,使用 showForeground() 恢复
void hideForeground();
// 延迟的 showForeground2()
void delayShowed(int msecond, QPoint point = QPoint(0, 0));// 调整最小大小,很常用
void adjustMinimumSize();void setState(bool s = true);
bool getState();// 模拟鼠标点击效果,与鼠标点击作用一样
// 会触发 clicked 信号
virtual void simulateStatePress(bool s = true, bool a = false);// 该点是否在按钮的范围内
virtual bool inArea(QPoint point);

源码下载

这篇关于《QT实用小工具·四十七》可交互的创意动态按钮的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/947208

相关文章

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个