《QT实用小工具·一》电池电量组件

news2024/11/22 16:20:44

1、概述
项目源码放在文章末尾
本项目实现了一个电池电量控件,包含如下功能:

  1. 可设置电池电量,动态切换电池电量变化。
  2. 可设置电池电量警戒值。
  3. 可设置电池电量正常颜色和报警颜色。
  4. 可设置边框渐变颜色。
  5. 可设置电量变化时每次移动的步长。
  6. 可设置边框圆角角度、背景进度圆角角度、头部圆角角度。

下面是demo演示:
在这里插入图片描述
项目部分代码如下所示:

#ifndef BATTERY_H
#define BATTERY_H

/**
 * 电池电量控件 
 * 1. 可设置电池电量,动态切换电池电量变化。
 * 2. 可设置电池电量警戒值。
 * 3. 可设置电池电量正常颜色和报警颜色。
 * 4. 可设置边框渐变颜色。
 * 5. 可设置电量变化时每次移动的步长。
 * 6. 可设置边框圆角角度、背景进度圆角角度、头部圆角角度。
 */

#include <QWidget>

#ifdef quc
class Q_DECL_EXPORT Battery : public QWidget
#else
class Battery : public QWidget
#endif

{
    Q_OBJECT

    Q_PROPERTY(double minValue READ getMinValue WRITE setMinValue)
    Q_PROPERTY(double maxValue READ getMaxValue WRITE setMaxValue)
    Q_PROPERTY(double value READ getValue WRITE setValue)
    Q_PROPERTY(double alarmValue READ getAlarmValue WRITE setAlarmValue)

    Q_PROPERTY(bool animation READ getAnimation WRITE setAnimation)
    Q_PROPERTY(double animationStep READ getAnimationStep WRITE setAnimationStep)

    Q_PROPERTY(int borderWidth READ getBorderWidth WRITE setBorderWidth)
    Q_PROPERTY(int borderRadius READ getBorderRadius WRITE setBorderRadius)
    Q_PROPERTY(int bgRadius READ getBgRadius WRITE setBgRadius)
    Q_PROPERTY(int headRadius READ getHeadRadius WRITE setHeadRadius)

    Q_PROPERTY(QColor borderColorStart READ getBorderColorStart WRITE setBorderColorStart)
    Q_PROPERTY(QColor borderColorEnd READ getBorderColorEnd WRITE setBorderColorEnd)

    Q_PROPERTY(QColor alarmColorStart READ getAlarmColorStart WRITE setAlarmColorStart)
    Q_PROPERTY(QColor alarmColorEnd READ getAlarmColorEnd WRITE setAlarmColorEnd)

    Q_PROPERTY(QColor normalColorStart READ getNormalColorStart WRITE setNormalColorStart)
    Q_PROPERTY(QColor normalColorEnd READ getNormalColorEnd WRITE setNormalColorEnd)

public:
    explicit Battery(QWidget *parent = 0);
    ~Battery();

protected:
    void paintEvent(QPaintEvent *);
    void drawBorder(QPainter *painter);
    void drawBg(QPainter *painter);
    void drawHead(QPainter *painter);

private slots:
    void updateValue();

private:
    double minValue;        //最小值
    double maxValue;        //最大值
    double value;           //目标电量
    double alarmValue;      //电池电量警戒值

    bool animation;         //是否启用动画显示
    double animationStep;   //动画显示时步长

    int borderWidth;        //边框粗细
    int borderRadius;       //边框圆角角度
    int bgRadius;           //背景进度圆角角度
    int headRadius;         //头部圆角角度

    QColor borderColorStart;//边框渐变开始颜色
    QColor borderColorEnd;  //边框渐变结束颜色

    QColor alarmColorStart; //电池低电量时的渐变开始颜色
    QColor alarmColorEnd;   //电池低电量时的渐变结束颜色

    QColor normalColorStart;//电池正常电量时的渐变开始颜色
    QColor normalColorEnd;  //电池正常电量时的渐变结束颜色

    bool isForward;         //是否往前移
    double currentValue;    //当前电量
    QRectF batteryRect;     //电池主体区域
    QTimer *timer;          //绘制定时器

public:
    //默认尺寸和最小尺寸
    QSize sizeHint() const;
    QSize minimumSizeHint() const;

    //设置范围值
    void setRange(double minValue, double maxValue);
    void setRange(int minValue, int maxValue);

    //获取和设置最小值
    double getMinValue() const;
    void setMinValue(double minValue);

    //获取和设置最大值
    double getMaxValue() const;
    void setMaxValue(double maxValue);

    //获取和设置电池电量值
    double getValue() const;
    void setValue(double value);

    //获取和设置电池电量警戒值
    double getAlarmValue() const;
    void setAlarmValue(double alarmValue);

    //获取和设置是否启用动画显示
    bool getAnimation() const;
    void setAnimation(bool animation);

    //获取和设置动画显示的步长
    double getAnimationStep() const;
    void setAnimationStep(double animationStep);

    //获取和设置边框粗细
    int getBorderWidth() const;
    void setBorderWidth(int borderWidth);

    //获取和设置边框圆角角度
    int getBorderRadius() const;
    void setBorderRadius(int borderRadius);

    //获取和设置背景圆角角度
    int getBgRadius() const;
    void setBgRadius(int bgRadius);

    //获取和设置头部圆角角度
    int getHeadRadius() const;
    void setHeadRadius(int headRadius);

    //获取和设置边框渐变颜色
    QColor getBorderColorStart() const;
    void setBorderColorStart(const QColor &borderColorStart);

    QColor getBorderColorEnd() const;
    void setBorderColorEnd(const QColor &borderColorEnd);

    //获取和设置电池电量报警时的渐变颜色
    QColor getAlarmColorStart() const;
    void setAlarmColorStart(const QColor &alarmColorStart);

    QColor getAlarmColorEnd() const;
    void setAlarmColorEnd(const QColor &alarmColorEnd);

    //获取和设置电池电量正常时的渐变颜色
    QColor getNormalColorStart() const;
    void setNormalColorStart(const QColor &normalColorStart);

    QColor getNormalColorEnd() const;
    void setNormalColorEnd(const QColor &normalColorEnd);

public Q_SLOTS:
    void setValue(int value);
    void setAlarmValue(int alarmValue);

Q_SIGNALS:
    void valueChanged(double value);
};

#endif // BATTERY_H

源码下载

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

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

相关文章

CleanMyMac X 4.15.1 for Mac 最新中文破解版 系统优化垃圾清理工具

CleanMyMac X for Mac 是一款功能更加强大的系统优化清理工具&#xff0c;相比于 CleanMyMac 4.15.1来说&#xff0c;功能增加了不少&#xff0c;此版本为4.15.1官方最新中英文正式破解版本&#xff0c;永久使用&#xff0c;解决了打开软件崩溃问题&#xff0c;最新版4.15.1版本…

neo4j相同查询语句一次查询特慢再次查询比较快。

现象&#xff1a; neo4j相同查询语句一次查询特慢再次查询比较快。 分析&#xff1a; 查询语句 //查询同名方法match(path:Method) where id(path) in [244333030] and NOT path:Constructor//是rpc的方法match(rpc_method:Method)<-[:DECLARES]-(rpc_method_cls:Class) -…

2024年智能版控费系统方案卓健易控

2024年智能版控费系统方案卓健易控 详细可咨询&#xff1a;19138173009 设备智能卓健易控ZJ-V8.0控费方案在科学和技术不断发展的背景下&#xff0c;逐渐实现了更新和迭代。现如今&#xff0c;感应技术、生物识别技术、智能图像识别技术、过程记录技术、监管控制技术等方面的…

Pytorch的hook函数

hook函数是勾子函数&#xff0c;用于在不改变原始模型结构的情况下&#xff0c;注入一些新的代码用于调试和检验模型&#xff0c;常见的用法有保留非叶子结点的梯度数据&#xff08;Pytorch的非叶子节点的梯度数据在计算完毕之后就会被删除&#xff0c;访问的时候会显示为None&…

解析为什么使用celery的task装饰就有delay属性

分析task装饰器原理 from celery.task import periodic_task task源码如下 def task(*args, **kwargs):"""Deprecated decorator, please use :func:celery.task."""return current_app.task(*args, **dict({base: Task}, **kwargs))这里回调…

JavaSE day14笔记

第十四天课堂笔记 课上: 适当做笔记课下 : 总结 , 读代码 , 反复敲代码 , 做练习 数组★★★ 数组 : 存储多个 同一类型 的容器格式 :数组类型 : 引用数据类型, new运算符在堆中 分配一块连续的存储空间 , 系统会给数组元素默认初始化 , 将该数组的引用赋值给数组名 引用数据…

如何在Win10使用IIS服务搭建WebDAV网站并实现无公网IP访问内网文件内容

文章目录 前言1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网3.1 安装cpolar内网穿透3.2 配置WebDav公网访问地址 4. 映射本地盘符访问 前言 在Windows上如何搭建WebDav&#xff0c;并且结合cpolar的内网穿透工具实现在公网访…

腾讯云4核8G服务器价格,12M带宽一年646元,送3个月

2024年腾讯云4核8G服务器租用优惠价格&#xff1a;轻量应用服务器4核8G12M带宽646元15个月&#xff0c;CVM云服务器S5实例优惠价格1437.24元买一年送3个月&#xff0c;腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云4核8G服务器优惠价格 轻…

ArcGIS矢量裁剪矢量

一、利用相交工具 Arctoolbox工具一分析工具一叠加分析一相交

Flink-CDC 无法增量抽取SQLServer数据

1.问题 因部署在WindowsServer服务器SQLServer发生过期后重启&#xff0c;Flink-CDC同步进行作业重启&#xff0c;启动后无报错信息&#xff0c;数据正常抽取。但是观察几天后发现当天数据计算指标无法展示 2.定位 因为没用进行任何修改&#xff0c;故初步判断不是因Flink-C…

【Java面试题】Redis上篇(基础、持久化、底层数据结构)

文章目录 基础1.什么是Redis?2.Redis可以用来干什么&#xff1f;3.Redis的五种基本数据结构&#xff1f;4.Redis为什么这么快&#xff1f;5.什么是I/O多路复用&#xff1f;6.Redis6.0为什么使用了多线程&#xff1f; 持久化7.Redis的持久化方式&#xff1f;区别&#xff1f;8.…

vsqt更改ui后cpp文件报错 原理

操作&#xff1a;我在ui界面改了一下&#xff0c;然后选中cpp文件右键编译->重新扫描&#xff08;或者全部重新生成&#xff09; 现象&#xff1a;这里一直红着&#xff0c;在UI命名空间&#xff0c;找不到PresetEvent 这个类 private:Ui::PresetEvent ui;//Ui::preset_eve…

机器学习入门:概念、步骤、分类与实践

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【JavaWeb】Day24.Web入门——HTTP协议(一)

HTTP协议——概述 1.介绍 HTTP&#xff1a;Hyper Text Transfer Protocol(超文本传输协议)&#xff0c;规定了浏览器与服务器之间数据传输的规则。 http是互联网上应用最为广泛的一种网络协议http协议要求&#xff1a;浏览器在向服务器发送请求数据时&#xff0c;或是服务器在…

hostapd代码分析

控制操作收包 hostapd_ctrl_iface_init函数中注册eloop回调&#xff1a; if (eloop_register_read_sock(hapd->ctrl_sock,hostapd_ctrl_iface_receive, hapd, NULL) <0) {hostapd_ctrl_iface_deinit(hapd);return -1;} hostapd_ctrl_iface_receive函数是hostapd接收报文…

指纹浏览器是什么?有哪些好用的推荐?

在网络世界中&#xff0c;保护您的在线隐私和安全非常重要。反检测浏览器是专门为此诞生的工具&#xff0c;旨在通过更改浏览器指纹来帮助您做到这一点&#xff0c;它们使网站、广告商和其他人很难跟踪您的在线行为。 一、什么是反检测浏览器&#xff1f; 您是否想过网站如何检…

AI21实验室推出Jamba模型,突破AI算力瓶颈,引领行业创新!

近日&#xff0c;AI领域再次迎来重大突破。知名AI研究实验室AI21在官网正式发布了其最新研究成果——基于SSM-Transformer混合架构的商业大模型Jamba。这款模型不仅继承了Transformer架构的优点&#xff0c;还巧妙地融合了SSM技术的优势&#xff0c;实现了性能和效率的双重飞跃…

Arthas-tarce线上排查问题流程

入门文档&#xff1a;trace | arthas 1、jar下载和启动 连接curl -O https://arthas.aliyun.com/arthas-boot.jar【wget https://arthas.aliyun.com/arthas-boot.jar】 。.../jdk/bin/java -jar arthas-boot.jar 22336【最好在这个目录启动,port可选】 选择进程序号 enter回车…

Linux:详解TCP协议段格式

文章目录 认识TCPTCP协议段格式 本篇主要总结的是TCP协议的一些字段 认识TCP TCP协议全称是传输控制协议&#xff0c;也就是说是要对于数据的传输进行一个控制 以上所示的是对于TCP协议进行数据传输的一个理解过程 全双工 至此就可以对于TCP协议是全双工的来进行理解了&…

WinServer启用Hyper-V新建虚拟机没有网络、无法开启增强模式

没有网络问题如下&#xff1a; 原因&#xff1a;没有在Hyper-V中新增交换机 操作—虚拟交换机管理器—新建虚拟网络交换机-外部-允许管理员操作系统共享此网络适配器 无法开启增强模式&#xff1a;