《QT实用小工具·五十四》果冻弹出效果的动画按钮

2024-05-05 19:36

本文主要是介绍《QT实用小工具·五十四》果冻弹出效果的动画按钮,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

该项目实现动画按钮,鼠标放在按钮上可以弹性拉出的三个按钮,使用贝塞尔曲线实现,项目demo显示如下所示:
在这里插入图片描述

项目部分代码如下所示:

#ifndef WATERCIRCLEBUTTON_H
#define WATERCIRCLEBUTTON_H#include <QObject>
#include <QWidget>
#include "interactivebuttonbase.h"class WaterCircleButton : public InteractiveButtonBase
{
public:WaterCircleButton(QWidget* parent = nullptr);WaterCircleButton(QIcon icon, QWidget* parent = nullptr);WaterCircleButton(QPixmap pixmap, QWidget* parent = nullptr);protected:void enterEvent(QEvent* event) override;void leaveEvent(QEvent* event) override;void mousePressEvent(QMouseEvent* event) override;void mouseReleaseEvent(QMouseEvent* event) override;void mouseMoveEvent(QMouseEvent* event) override;void resizeEvent(QResizeEvent* event) override;QPainterPath getBgPainterPath() override;QPainterPath getWaterPainterPath(Water water) override;void simulateStatePress(bool s = true);bool inArea(QPoint point) override;protected:QPoint center_pos;bool in_circle;int radius;
};#endif // WATERCIRCLEBUTTON_H
#include "watercirclebutton.h"WaterCircleButton::WaterCircleButton(QWidget* parent) : InteractiveButtonBase (parent), in_circle(false), radius(16)
{}WaterCircleButton::WaterCircleButton(QIcon icon, QWidget *parent) : InteractiveButtonBase (icon, parent), in_circle(false), radius(16)
{}WaterCircleButton::WaterCircleButton(QPixmap pixmap, QWidget *parent) : InteractiveButtonBase (pixmap, parent), in_circle(false), radius(16)
{}void WaterCircleButton::enterEvent(QEvent *event)
{}void WaterCircleButton::leaveEvent(QEvent *event)
{if (in_circle && !pressing && !inArea(mapFromGlobal(QCursor::pos()))){in_circle = false;InteractiveButtonBase::leaveEvent(event);}
}void WaterCircleButton::mousePressEvent(QMouseEvent *event)
{if (in_circle || (!hovering && inArea(event->pos())))return InteractiveButtonBase::mousePressEvent(event);
}void WaterCircleButton::mouseReleaseEvent(QMouseEvent *event)
{if (pressing){InteractiveButtonBase::mouseReleaseEvent(event);if (leave_after_clicked || (!inArea(event->pos()) && !pressing)) // 鼠标移出{in_circle = false;InteractiveButtonBase::leaveEvent(nullptr);}}
}void WaterCircleButton::mouseMoveEvent(QMouseEvent *event)
{bool is_in = inArea(event->pos());if (is_in && !in_circle)// 鼠标移入{in_circle = true;InteractiveButtonBase::enterEvent(nullptr);}else if (!is_in && in_circle && !pressing) // 鼠标移出{in_circle = false;InteractiveButtonBase::leaveEvent(nullptr);}if (in_circle)InteractiveButtonBase::mouseMoveEvent(event);
}void WaterCircleButton::resizeEvent(QResizeEvent *event)
{center_pos = geometry().center() - geometry().topLeft();radius = min(size().width(), size().height())/ 2;return InteractiveButtonBase::resizeEvent(event);
}QPainterPath WaterCircleButton::getBgPainterPath()
{QPainterPath path;int w = size().width(), h = size().height();QRect rect(w/2-radius, h/2-radius, radius*2, radius*2);path.addEllipse(rect);return path;
}QPainterPath WaterCircleButton::getWaterPainterPath(InteractiveButtonBase::Water water)
{QPainterPath path = InteractiveButtonBase::getWaterPainterPath(water) & getBgPainterPath();return path;
}void WaterCircleButton::simulateStatePress(bool s)
{in_circle = true;InteractiveButtonBase::simulateStatePress(s);in_circle = false;
}bool WaterCircleButton::inArea(QPoint point)
{return (point - center_pos).manhattanLength() <= radius;
}

源码下载

这篇关于《QT实用小工具·五十四》果冻弹出效果的动画按钮的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

超强的截图工具:PixPin

你是否还在为寻找一款功能强大、操作简便的截图工具而烦恼?市面上那么多工具,常常让人无从选择。今天,想给大家安利一款神器——PixPin,一款真正解放双手的截图工具。 想象一下,你只需要按下快捷键就能轻松完成多种截图任务,还能快速编辑、标注甚至保存多种格式的图片。这款工具能满足这些需求吗? PixPin不仅支持全屏、窗口、区域截图等基础功能,它还可以进行延时截图,让你捕捉到每个关键画面。不仅如此

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr