《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基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学

jvm调优常用命令行工具详解

《jvm调优常用命令行工具详解》:本文主要介绍jvm调优常用命令行工具的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一 jinfo命令查看参数1.1 查看jvm参数二 jstack命令2.1 查看现场堆栈信息三 jstat 实时查看堆内存,gc情况3.1

MySQL使用binlog2sql工具实现在线恢复数据功能

《MySQL使用binlog2sql工具实现在线恢复数据功能》binlog2sql是大众点评开源的一款用于解析MySQLbinlog的工具,根据不同选项,可以得到原始SQL、回滚SQL等,下面我们就来... 目录背景目标步骤准备工作恢复数据结果验证结论背景生产数据库执行 SQL 脚本,一般会经过正规的审批

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并