• Stars
    star
    124
  • Rank 288,207 (Top 6 %)
  • Language
    C++
  • License
    Apache License 2.0
  • Created over 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

[Qt控件] 带动画交互的菜单、最小化、最大化、关闭按钮,强大自定义

可交互的创意动态按钮

特点

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

截图

截图

用法

// 方框按钮
InteractiveButtonBase* btn = new InteractiveButtonBase("text", this);
btn->setGeometry(300, 300, 100, 100);
// 圆形按钮带图标,以及鼠标靠近(父控件悬浮)出现动画
icon_btn = new WaterCircleButton(QIcon(":/icons/point_menu"), this);
icon_btn->setGeometry(100, 50, 32, 32);
icon_btn->setShowAni(true); // 调用showForeground2时出现动画
// 自定义颜色按钮(遮罩效果)
InteractiveButtonBase* pixmap_btn = new InteractiveButtonBase(QPixmap(":/icons/point_menu"), this);
pixmap_btn->setGeometry(132, 50, 32, 32);
// 椭圆形按钮
InteractiveButtonBase* float_btn = new WaterFloatButton("text", this);
float_btn->setGeometry(164, 50, 100, 32);
float_btn->setBgColor(QColor(102,51,204,192), QColor(102,51,204,255));
// 自定义按钮(win最小化按钮)
WinMenuButton* menu_btn = new WinMenuButton(this);
menu_btn->setGeometry(368, 10, 32, 32);

API

只说明一下常用的方法,具体可参考 interactivebuttonbase.h

// 设置文本(同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);

信号:

void showAniFinished();
void hideAniFinished();
void pressAppearAniFinished();
void pressDisappearAniFinished();
void jitterAniFinished();

// 点击事件
void clicked();
void doubleClicked();
void rightClicked();

// 焦点
void signalFocusIn();
void signalFocusOut();

// 其余鼠标事件
void signalMouseEnter();
// 进入后延迟信号(以渐变动画完成为准,相当于可手动设置)
void signalMouseEnterLater();

void signalMouseLeave();
// 离开后延迟的信号(直至渐变动画完成(要是划过一下子离开,这个也会变快))
void signalMouseLeaveLater();

void signalMousePress(QMouseEvent *event);
void signalMousePressLater(QMouseEvent *event);

void signalMouseRelease(QMouseEvent *event);
void signalMouseReleaseLater(QMouseEvent *event);

More Repositories

1

Bilibili-MagicalDanmaku

【神奇弹幕】哔哩哔哩直播万能场控机器人,弹幕姬+答谢姬+回复姬+点歌姬+各种小骚操作,目前唯一可编程机器人
C++
888
star
2

Qt-ShowyWidgets

[Qt] 个人开发的各种花里胡哨的Qt控件集合
387
star
3

Qt-FacileMenu

[Qt控件] 非常飘逸的Qt菜单控件
C++
92
star
4

FloatingUniverse

【悬浮宇宙】 PC万能悬浮窗快捷工具,快速存放文件夹、文件、剪贴板,打开网址、文件等
C++
86
star
5

Qt-DragableTabWidget

[Qt] 可拖拽出新窗口、合并标签的 TabWidget
C++
73
star
6

Qt-Timeline-Widget

[Qt控件] 时间轴列表控件
C++
68
star
7

Qt-SlideShow

[Qt] 简单易用的轮播图
C++
37
star
8

WriterFly-Free

【写作天下】为作家们创造世界而诞生,执云作笔,诉尽平生意。
Lex
35
star
9

Qt-Notification-Manager-V2

[Qt控件] 仿Windows消息控件,多通知显示,定时/手动关闭,交互动画
C++
35
star
10

Qt-LabeledEdit

[Qt] 带有标签、下划线的Material Design风格输入框,以及一些创意动画
C++
29
star
11

CatlikeQQ

【猫样QQ】 基于cqhttp的PC端的QQ消息通知、悬浮气泡、快速回复
C++
28
star
12

NeveMusic

【雪以音乐】同时支持网易云音乐、QQ音乐的轻量级点歌姬,简约界面,唯美动画
C++
27
star
13

Qt-SapidSwitch

[Qt] 爱心/线条开关,支持手势拖动
C++
27
star
14

Qt-JellyButtonBox

[Qt控件] 果冻弹出效果的动画按钮
C++
26
star
15

Qt-GalleryWidget

[Qt控件] 带动画的Qt画廊控件
C++
24
star
16

Bezier-Wave

[Qt控件] 通过贝塞尔曲线画波浪动画,可控制 颜色/密度/速度/加速度
C++
23
star
17

EasyMeeting_Desktop

[Qt] 智能会议室 桌面端,人脸识别签到
C++
20
star
18

Qt-PurelinButton

[Qt控件] 简约到只有几条线的动画切换显示效果的按钮控件
C++
19
star
19

Qt-RandomVerification

[Qt] 随机图形验证码,带有一些可人的交互与动画
C++
17
star
20

EasyMeeting_Web

[ThinkPHP5] 智能会议室Web端:账号管理、会议室设置、用户预约、在线签到
PHP
14
star
21

Qt-LineChart

[Qt控件] 动态增删数据与平滑缩放移动的折线图
C++
13
star
22

Qt-notepad

高仿 Windows 记事本的 Qt 实现方案
C++
13
star
23

Qt-WaterfallContainer

[Qt控件] 支持不规则宽高的瀑布流控件,带有调整动画与平滑滚动
C++
13
star
24

Qt-DialogueEditor

[Qt控件] 对话文(剧本)编辑器
C++
12
star
25

Let-s-remember

[Android] 全民记忆:根据艾宾浩斯遗忘曲线,科学地背诵单词、诗文,独创挡板挡板功能、记忆盒子
Java
11
star
26

Qt-InterestingIndicate

[Qt] 带分解动画的三角形指示条
C++
10
star
27

Qt-Notification-Manager

[Qt控件] 桌面应用消息通知管理控件(仿Windows消息,支持多通知、同时通知、开关动画等)
C++
10
star
28

Qt-AES-Base64-XOR-Cryption

[Qt工具] 字符串加密工具,有 AES、Base64+XOR 两种。
C++
9
star
29

ImageThemeExtraction

[Qt] 使用八叉树算法提取图片主题色
C++
9
star
30

Qt-SlimScrollBar

[Qt控件] 如同张弓般可左右拉弦的垂直滚动条
C++
8
star
31

Qt-AniCheckBox

[Qt控件] 带动画的 CheckBox
C++
8
star
32

Online555

[QT/Socket] 多人在线五子棋对战平台 客户端
C++
8
star
33

Article-Corrector

[Python/pycorrector] 全文错别字矫正,错误类型包括:谐音、混淆音、词序、形似字、语法错误等
Python
8
star
34

GoBangBangBang

[Swing] 创意五子棋,简洁清爽的UI与智能强大的AI,并尝试模仿人类情绪的动画设计
Java
8
star
35

DDT

[VC++] 仿弹弹堂小游戏:一两天赶出来的,所以比较粗糙,可玩性不高,看看就好。
C++
8
star
36

End-Novel

[JSP] 终点小说网:JSP课程设计,简单的登录注册、数据库、MVC、抓包、发布作品等
HTML
7
star
37

LotteryTurntable

[QT] 随机抽奖转盘(重写他人)
C++
7
star
38

vscode-plugin-LazyKey

【懒键】[VSCode 插件] 分析上下文内容,通过各种自动化宏使得按键次数大大减小,而不影响原来的操作习惯
JavaScript
7
star
39

EscapeDialog

[Qt控件] 带有会逃跑按钮的对话框,点不到点不到点不到~
C++
6
star
40

Online555_Server

[QT/Socket] 多人在线五子棋对战平台 服务端
C++
6
star
41

QQSendMessage

[C/Qt] 延迟发送QQ消息至指定联系人
C++
6
star
42

BiQuGe-Novels

[Python] 笔趣阁小说爬虫
Python
5
star
43

UpUpTool

【自动更新工具】让发布的程序进行自动更新,用户无感
C
5
star
44

cool-photo-wall

(改写) 炫酷3D动态照片墙,网格+圆球+螺旋+阵列
JavaScript
5
star
45

Qt-SmoothScrollListWidget

[Qt控件] 平滑滚动列表框,极致情况下可叠加加速
C++
5
star
46

Dynamic-Background

[Qt控件] 一套微动背景,却似乎又只是静态的?风动,幡动,仁者心动,到底是什么在动?
C++
5
star
47

LasyUtilsForQt

[Qt] 自制便捷工具包,保证小白一看就懂
C++
5
star
48

ListAutoSort

[Qt] 办公数据分拣,通过算法全自动提取任意文本中的散乱数据,如姓名/手机/邮箱/班级等,导出到Excel
C++
5
star
49

EasyMeeting_Android

[Android] 智能会议室管理系统,Android 端
Java
5
star
50

BuYaoHibernate

【不要休眠】临时阻止电脑休眠
C++
4
star
51

FastText-GUI

在Qt中调用C语言版fastText,无缝衔接至GUI应用
C++
4
star
52

PigeonCapture

【鸽鸽子时光截图】动态截图,保存过去、现在、未来的图片,一键提取最优图
C++
4
star
53

Mid-Autumn-moon

[Qt动画] 几十行代码徒手绘制阴晴圆缺动画的中秋佳月
C++
4
star
54

Qt-Logger

Qt使用EasyLogger的Demo
C
3
star
55

Qt-Pay-Demo

Qt扫码支付程序Demo
C++
3
star
56

EmotionSongsPlayer

[Qt控件] 后台随机播放某一类型的音乐(来源:网易云音乐)
C++
3
star
57

OneDeamon

一个简单易用的守护程序
C++
3
star
58

KeyCounter

【按键统计】全局所有按键次数统计
C++
3
star
59

Qt-MultiLayerSelector

Qt多层选择器
C++
3
star
60

TextSimilarityMatching

[C++] 根据分词向量判断多段文本相似度,将长文本定位到缩略大纲
C++
3
star
61

permanentQRcode

简易版微信群永久二维码(原理)
PHP
2
star
62

yunj

[PHP/JS/MDUI] 云笺:用最快的速度来记录与分享文字,免登录/分页目录/代码高亮/保存历史/实时同步/网页制作
CSS
2
star
63

-4o

[Qt] 一个 -4° 的动画……我也不知道能用在哪儿
C++
2
star
64

AutoCopyDir

[Qt] 两个文件夹之间(eg:本地+公共盘)双向定时上传/下载
C++
2
star
65

AppAutoAhead

[Qt] 根据应用运行情况,推荐可能的运行程序(慢慢研究吧,后面不会了)
C++
2
star
66

What-s-the-novel-type

[Python/FastText] 标签分类:通过作品名字判断小说类型
Python
2
star
67

MealCount

[Qt] 基于课程表的餐点人数统计
C++
2
star
68

CryptoppDemo

[Qt] 用Cryptopp库来加密解密
C++
2
star
69

RepositoryLineCounter

Git仓库行数统计工具,支持指定时间和开发人员,多仓库统计
C++
2
star
70

MultiMsg_forExcel

[E4A] 办公利器-短信群发,面向部门高管,针对每条记录(Excel或纯文本)生成不一样的短信,一键发送
2
star
71

MZFY

[E4A] 码字风云_v3.4.3(开源版)
1
star
72

FastCopy

[E4A] 快捷复制:常用语快速复制,客服、广告专用。(我的第一个 Hello World 程序)
1
star
73

BorderFetch

[QT] 简单的仿Photoshop魔棒实现(树木边缘检测)
Makefile
1
star
74

WriterFly-Web

[ThinkPHP/AngularJS/MDUI] 写作天下、码字风云的网页版
HTML
1
star
75

Poorrow

[Android] 穷光蛋的忧伤:一个简洁的记账APP
Java
1
star
76

CNNAcceleratorTopology-Delay

验证CNN中卷积的各项delay
C++
1
star
77

MZZY_WriterVoice

[E4A] 碼字之语,码字风云语音朗读插件(讯飞引擎)
1
star
78

QQ-Notification_Reply

【QQ通知回复】QQ消息分组显示,通知栏回复
Dart
1
star
79

NovelAI

小说AI在线测试与反馈平台,完全从零独立开发,包括【中文句末标点判断】、【通过书名分析类型】两个模块,皆以仿人类思维方式,愿吊打人工智障!
PHP
1
star
80

NonsenseAutoSkip

针对各平台的多类视频,经常出现一些废话,自动跳过这些废话。
Python
1
star