《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

相关文章

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

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

MySql match against工具详细用法

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

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

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

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

基于Python打造一个全能文本处理工具

《基于Python打造一个全能文本处理工具》:本文主要介绍一个基于Python+Tkinter开发的全功能本地化文本处理工具,它不仅具备基础的格式转换功能,更集成了中文特色处理等实用功能,有需要的... 目录1. 概述:当文本处理遇上python图形界面2. 功能全景图:六大核心模块解析3.运行效果4. 相