《QT实用小工具·四十八》趣味开关

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

该项目实现了各种样式的趣味开关:
1、爱心形状的switch开关,支持手势拖动、按压效果

2、线条样式的3种开关

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

使用方式:
1、sapid_switch文件夹加入工程,.pro文件中INCLUDEPATH+=sapid_switch
2、

LovelyHeartSwitch* swtch = new LovelyHeartSwitch(this);
swtch->setState(bool);
connect(swtch, SIGNAL(stateChanged(bool)), ...);

项目部分代码如下所示:

#ifndef SAPIDSWITCHBASE_H
#define SAPIDSWITCHBASE_H#include <QObject>
#include <QWidget>
#include <QPainter>
#include <QPainterPath>
#include <QResizeEvent>
#include <QMouseEvent>
#include <QApplication>
#include <QDebug>
#include <QPropertyAnimation>
#include <QMouseEvent>
#include "math.h"class SapidSwitchBase : public QWidget
{Q_OBJECTQ_PROPERTY(double swtch READ getSwtchProg WRITE setSwtchProg)Q_PROPERTY(double press READ getPressProg WRITE setPressProg)
public:explicit SapidSwitchBase(QWidget *parent = nullptr);bool getState() const;bool isChecked() const;virtual void setSuitableHeight(int h);signals:void stateChanged(bool state);public slots:void setState(bool state);void setStateWithoutSignal(bool state);void toggleState();void toggleStateWithoutSignal();void setForeground(QColor color);void setBackground(QColor on, QColor off);void setBorder(QColor color, int size);void setAnimationDuration(int dur);void setAnimationEasingCurve(QEasingCurve curve);protected:virtual void resizeEvent(QResizeEvent *event) override;virtual void mousePressEvent(QMouseEvent *event) override;virtual void mouseMoveEvent(QMouseEvent *event) override;virtual void mouseReleaseEvent(QMouseEvent *event) override;virtual void calculateGeometry();virtual QPainterPath getBgPath() const;virtual QColor getBgColor() const;virtual void startSwitchAnimation();virtual void startSwitchAnimation(double target, int duration);virtual void startNoSwitchAnimation();virtual void setSwtchProgManual(double p);private:double getSwtchProg();void setSwtchProg(double p);double getPressProg();void setPressProg(double p);protected:// 状态bool currentState = false; // 开关状态double aniProgess = 0;     // 当前开关动画值,趋向state,范围0~1QColor colorFg = QColor(255, 250, 250);QColor colorOn = QColor(30, 144, 255);QColor colorOff = Qt::lightGray;QColor colorBd = Qt::transparent;int borderSize = 0; // 四周的间距,算入手势拖拽的位置int switchDuration = 350;QEasingCurve curve = QEasingCurve::InOutCubic;// 几何const double sapid_PI = 3.1415926535;const double GenHao2 = sqrt(2.0);// 滑动手势QPoint pressPos;bool moved = false;bool dragging = false;bool moveTargetState = false; // 滑动的目标状态,等待松手const double stickOnProp = 0.15; // 在两侧贴靠,不收左右滑动手势影响int prevX = 0;double slideLeft, slideRight;  // 滑动左右判定边界// 按压缩放const double pressScale = 0.9; // 按压缩小动画double pressAniProg; // 按下去的动画进度double pressScaleProgress = 1; // 按压缩小进度
};#endif // SAPIDSWITCHBASE_H

源码下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/5150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新版pycharm安装教程

目录 PyCharm 简介 访问 PyCharm 官网&#xff1a; 选择版本&#xff1a; 这里我们选择社区版即可 环境变量的配置 第一步 第二步 第三步 Pycharm的使用 【报错解决】 通用注意事项&#xff1a; PyCharm 简介 ​ PyCharm是一种Python IDE&#xff08;Integrated Devel…

ABB机械臂3HAC2492-1控制柜电缆维修思路

ABB机器人控制柜是机器人运行的核心部件&#xff0c;而电缆则是控制柜与机器人之间的桥梁。当出现ABB工业机械手控制柜电缆故障时&#xff0c;会影响机器人的正常运行&#xff0c;甚至可能导致安全事故。ABB机械臂3HAC2492-1控制柜信号线缆维修步骤 1. 拆下控制柜电缆&#xff…

Oracle索引组织表与大对象平滑迁移至OceanBase的实施方案

作者简介&#xff1a;严军(花名吉远)&#xff0c;十年以上专注于数据库存储领域&#xff0c;精通Oracle、Mysql、OceanBase&#xff0c;对大数据、分布式、高并发、高性能、高可用有丰富的经验。主导过蚂蚁集团核心系统数据库升级&#xff0c;数据库LDC单元化多活项目&#xff…

连锁企业如何通过OceanBase解决数据库瓶颈

本文来自OceanBase客户&#xff0c;重庆三十七度健康管理有限公司的技术负责人Rinvay的分享 背景 足疗养生对于大家来说应该并不陌生&#xff0c;自古以来便有多部古籍记载。尽管现代生活中&#xff0c;人们可能不再严格遵循节气进行泡脚&#xff0c;但在忙碌的工作间隙&#…

C语言例题31:在屏幕上显示一个菱形

题目要求&#xff1a;在屏幕上显示一个菱形 #include <stdio.h>void main() {int i, j;int x;printf("输入菱形行数(3以上的奇数&#xff09;&#xff1a;");scanf("%d", &x);//显示菱形上面的大三角形for (i 1; i < (x 1) / 2; i) {for (…

缓解程序员工作压力:保持高效创新的方法与经验分享

文章目录 每日一句正能量前言工作与休息的平衡心理健康与自我关怀社交与网络建设后记 每日一句正能量 不要抱怨你的伴侣丑&#xff0c;不要抱怨你没有一个好爸爸&#xff0c;不要抱怨你的工作差&#xff0c;不要抱怨没人赏识你。现实有太多的不如意&#xff0c;就算生活 给你的…

【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】

上篇文章:【ARM CoreLink 系列 4.1 – NI-700 interconnect hub 控制器详细介绍】 文章目录 ASNI 介绍AMNI 介绍HSNI 介绍HMNI 介绍AHB请求者接口AHB镜像完成者接口PMNI 介绍PCDC 介绍Routers 介绍SERDES 介绍PMU 介绍ASNI 介绍 CoreLink NI-700的ASNI(

汇川AM400PLC编码器转速测量功能块(M法测速)

M法测速的原理和相关代码,大家可以参考相关专栏文章,常用链接如下: 1、编码器M法测速仿真 编码器M法测速仿真(Simulink)_mt法测速 simulink-CSDN博客文章浏览阅读2k次。编码器M法和T法测速的详细讲解可以参看下面的文章链接,这里不再赘述,这里主要介绍Simulink里建模仿真…

python程序设计语言超详细知识总结

Python 首先 python 并不是简单&#xff0c;什么语言都有基础和高级之分&#xff0c;要想掌握一门语言&#xff0c;必须把高级部分掌握才行。 HelloWorld helloWorld.py print(hello, world)数据类型与变量 变量的数据类型数据类型描述变量的定义方式整数型 (int)整数&…

吴恩达2022机器学习专项课程(一)8.1 过拟合

目录 什么是过拟合&#xff1f;如何解决过拟合&#xff1f;什么是泛化&#xff1f;它跟过拟合有什么关系&#xff1f;过拟合案例线性回归线性回归的欠拟合线性回归较好的拟合线性回归的过拟合 逻辑回归逻辑回归的欠拟合逻辑回归的较好的拟合逻辑回归的过拟合 总结 什么是过拟合…

Prometheus+Grafana多方位监控

PrometheusGrafana多方位监控 契机 ⚙ 最近发现火山引擎有托管的Prometheus,可是当前是邀测阶段。并且发现火山云的ECS是自带开机自启的exporter的。刚好需要搭建一套服务器监控&#xff0c;所以研究了一套Prometheus监控&#xff0c;包含linux主机监控nginx监控es监控rabbitM…

数据库(MySQL)—— 数据类型

数据库&#xff08;MySQL&#xff09;—— 数据类型 MySQL中的数据类型数值类型字符串类型时间戳类型 一个实例 我们今天来看MySQL中的数据类型&#xff1a; MySQL中的数据类型 MySQL中的数据类型有很多&#xff0c;主要分为三类&#xff1a;数值类型、字符串类型、日期时间类…

Linux的学习之路:21、线程(1)

摘要&#xff1a; 本章说一下线程 目录 摘要&#xff1a; 一、回忆一下 二、如何理解线程 三、命令行看线程 四、利用函数进行使用 五、本章总结 1、线程的优点 2、线程的缺点 3、线程的异常 4、线程的用途 一、回忆一下 1、exe就是一个文件 2、我们的可执行程序…

监控摄像机如何选购?

在选购监控摄像机时&#xff0c;需了解其基本知识&#xff0c;如分辨率、帧率、存储方式等。根据需求选择合适的产品&#xff0c;关注夜视功能、品牌和售后服务。预算和性价比同样重要。这样才能选到实用又安全的监控摄像机&#xff0c;提高生活品质。摘要由作者通过智能技术生…

JavaScript(四)

一、JavaScript变量 在 JavaScript 中&#xff0c;你可以使用几种不同的方式来声明变量。以下是主要的几种方式&#xff1a; 使用 var 关键字&#xff1a; 在 ES5 (ECMAScript 5) 及之前的版本中&#xff0c;var 是最常用的声明变量的方式。但是&#xff0c;var 有一个问题&am…

Scott Brinker:16年后,当前的(而非未来的)Martech已经出现,但分布不均。

杜克大学、德勤和美国营销协会共同开展的名为「CMO调查」 的两年一度的项目&#xff0c;是营销行业内的一项重要研究项目&#xff0c;已经持续了十多年。该调查的组织工作做得非常好&#xff0c;每次发布我都迫不及待地想要阅读。 我特别兴奋地阅读了刚刚发布的2024年春季版&a…

Elasticsearch内存占用分析

目录 1. 堆内存 (Heap Memory) 2. 索引缓存 (Index Cache) 3. 段缓存 (Segment Cache) 4. 文件系统缓存 (File System Cache) 5. 分片和副本 (Shards and Replicas) 6. 分析器和令牌器 (Analyzers and Tokenizers) 7. 过度配置 (Over-Allocation) 8. 垃圾回收 (Garbage…

MySQL加减间隔时间函数DATE_ADD和DATE_SUB的详解

目录 前言语法示例代码运用 前言 mysql中内置函数date_add 和 date_sub能对指定的时间进行增加或减少一个指定的时间间隔&#xff0c;返回的是一个日期。 语法 添加时间间隔 DATE_ADD(date,INTERVAL expr type)SELECT DATE_add(NOW(),INTERVAL -7 DAY);//获取7天前的日期 S…

java基础郎波版chapter4习题

文章目录 1.试说明Java语言是如何支持多重继承的。2.类的构造方法和成员方法之间有什么区别?构造方法&#xff1a;成员方法&#xff1a; 3.编写程序片段,定义表示课程的类Course。4.编写程序创建习题3中的Course类的对象,设置并打印输出该对象的课程名、编号以及先修课号。5.J…

Python数组类+AI插件

目录 规划实现初始化插入删除查找 AI插件单测注释调优建议 小结 规划 先想清楚都写哪些&#xff0c;然后再动手操作 用Python写了一个简单数组类&#xff0c;首先思考下都写哪些功能&#xff1a; 插入删除查找用插件做单元测试和写注释 目的只是实现一个简单的数组类&#x…