《QT实用小工具·五十二》文本或窗口炫酷有趣的滚动条——果冻条

本文主要是介绍《QT实用小工具·五十二》文本或窗口炫酷有趣的滚动条——果冻条,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

该项目实现了文本或窗口纤细的滚动条——果冻条
一个可以像弓弦一样拉出来,并且来回弹动的普通滚动条。

思路为此,但发现实际效果更像条状果冻,并且略有谐音,

故,称之为——“果冻条”!

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

项目部分代码如下所示:

#ifndef SLIMSCROLLBAR_H
#define SLIMSCROLLBAR_H#include <QObject>
#include <QScrollBar>
#include <QMouseEvent>
#include <QResizeEvent>
#include <QPainter>
#include <QPainterPath>
#include <QTimer>
#include <QDebug>
#include <QDateTime>
#include <QtMath>
#include "slimscrollbarpopup.h"#define DEB_EVENT if (0) qDebug()class SlimScrollBar : public QScrollBar
{Q_OBJECT
public:SlimScrollBar(QWidget* parent = nullptr);/*** 鼠标松开时抖动动画* 松开的时候计算每一次抖动距离+时间,放入队列中* 定时调整抖动的队列实体索引*/struct Jitter{Jitter(QPoint p, qint64 t) : point(p), timestamp(t) {}QPoint point;     // 要运动到的目标坐标qint64 timestamp; // 运动到目标坐标应该的时间戳,结束后删除本次抖动路径对象};/*** 鼠标按下/弹起水波纹动画* 鼠标按下时动画速度慢(压住),松开后动画速度骤然加快* 同样用队列记录所有的水波纹动画实体*/struct Water{Water(QPoint p, qint64 t) : point(p), press_timestamp(t),release_timestamp(0), finish_timestamp(0), finished(false) {}QPoint point;qint64 press_timestamp;   // 鼠标按下时间戳qint64 release_timestamp; // 鼠标松开时间戳。与按下时间戳、现行时间戳一起成为水波纹进度计算参数qint64 finish_timestamp;  // 结束时间戳。与当前时间戳相减则为渐变消失经过的时间戳bool finished;            // 是否结束。结束后改为渐变消失};void enable();void disable();void setBgColors(QColor normal, QColor hover, QColor press);void setFgColors(QColor normal, QColor hover, QColor press);void setRoundCap(bool round);protected:void enterEvent(QEvent* e) override;void leaveEvent(QEvent* e) override;void mousePressEvent(QMouseEvent *e) override;void mouseMoveEvent(QMouseEvent *e) override;void mouseReleaseEvent(QMouseEvent *e) override;void wheelEvent(QWheelEvent *e) override;void paintEvent(QPaintEvent *e) override;void sliderChange(SliderChange change) override;void contextMenuEvent(QContextMenuEvent *e) override;void hideEvent(QHideEvent *e) override;void resizeEvent(QResizeEvent *e) override;private:void paintPixmap();void activeTimer();void setOffsetPoss();int quick_sqrt(long X) const;void calcPixmapSize();void startPopup();void repaintPopup();void setJitter();qint64 getTimestamp();inline QPen getPen(QColor color, int width);signals:public slots:private slots:void eventTimer();private:QPixmap pixmap;QTimer* event_timer;QColor bg_normal_color = QColor(0xF0, 0xF0, 0xF0, 64);QColor bg_hover_color = QColor(0xF0, 0xF0, 0xF0, 128);QColor bg_press_color = QColor(0xF0, 0xF0, 0xF0, 192);QColor fg_normal_color = QColor(0xCC, 0xCC, 0xCC, 64);QColor fg_hover_color = QColor(0xCC, 0xCC, 0xCC, 128);QColor fg_press_color = QColor(0xCC, 0xCC, 0xCC, 192);bool round_cap = false;bool enabling = true;bool hovering = false;bool pressing = false;int hover_prop = 0;int press_prop = 0;QPoint press_pos;  // 按下位置QPoint mouse_pos;  // 鼠标位置QPoint target_pos; // 实时随队鼠标的目标点(相对竖直中心)QPoint anchor_pos; // 逐步靠近目标点的锚点QPoint effect_pos; // 偏差(相对于左上角),逐步靠近锚点根号位置bool popuping = false;SlimScrollBarPopup* popup = nullptr;QPoint popup_offset; // 弹窗和自己的左上角的绝对位置差double elastic_coefficient; // 弹性系数QList<Jitter> jitters;int jitter_duration;QList<Water> waters;int water_press_duration, water_release_duration, water_finish_duration;int water_radius;
};#endif // SLIMSCROLLBAR_H

源码下载

这篇关于《QT实用小工具·五十二》文本或窗口炫酷有趣的滚动条——果冻条的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、