Qt使用QWidget重绘实现圆环形渐变色进度条(支持不确定进度模式)

news2024/11/27 19:37:00

效果如下:

纯竖直方向顶部蓝色到底部青色的渐变。

从左上角偏左45°到右下角偏右45°蓝色青色渐变。

从左上角偏左22.5°到右下角偏右22.5°蓝色青色渐变。(这个角度渐变最好看)

可以选择添加背景图片

支持两种模式:正常进度模式不确定进度模式

(在不确定进度模式下可以选择手动隐藏中间的文本)

仅有两个文件:

circleprogressbar.h

#ifndef CIRCLEPROGRESSBAR_H
#define CIRCLEPROGRESSBAR_H

#include <QWidget>
#include <QPaintEvent>
#include <QFont>
#include <QColor>
#include <QTimer>

class CircleProgressBar : public QWidget
{
    Q_OBJECT
public:
    explicit CircleProgressBar(QWidget *parent = nullptr);

protected:
    // 重绘
    void paintEvent(QPaintEvent *event);

private:
    // 初始化
    void Init();

signals:
    // 调用setValue(int)导致当前进度值发送变化时发出此信号,没有变化时不会发出
    void valueChanged(int value);

public:
    // 设置进度值的最大值
    void setMaximum(int maximum=100);

    // 获取进度值的最大值
    int maximum();

    // 设置进度值的最小值
    void setMinimum(int minimum=0);

    // 获取进度值的最小值
    int minimum();

    // 设置进度值的最小值和最大值范围
    void setRange(int minimum=0, int maximum=100);

    // 设置当前进度值
    void setValue(int value);

    // 获取当前进度值
    int value();

    // 设置进度槽的宽度
    void setSlotWidth(int width=10);

    // 设置进度条的宽度
    void setBlockWidth(int width=10);

    // 设置进度槽的颜色
    void setSlotColor(const QColor &color);

    // 设置进度条的渐变起止颜色
    void setBlockColor(const QColor &colorBegin,const QColor &colorEnd);

    // 设置进度值文本是否可见
    void setTextVisible(bool visible);

    // 设置文本字体
    void setFont(const QFont &font);

    // 获取文本的字体
    QFont font();

    // 设置文本的颜色
    void setFontColor(const QColor &color);

    // 设置背景图片
    void setBackgroundPixmap(const QString &pic);

    // 设置背景图片是否可见
    void setBackgroundPixmapVisible(bool visible);

    // 使用不确定进度模式
    void setUncertainMode(bool enable);

    // 是否正处于不确定进度模式
    bool isUncertainMode();

    // 设置不确定进度模式滑块的度数跨度(仅限 0 - 360 之间的整数)
    void setUncertainModeSpanAngle(int spanAngle);

private slots:
    // 不去定进度模式下进度条旋转刷新
    void slot_UncertainModeAutoUpdate();

private:
    int m_SlotWidth;            // 进度槽宽度
    QColor m_SlotColor;         // 进度槽颜色

    int m_BlockWidth;           // 进度条宽度(进度条宽度一般要<=进度槽宽度)
    QColor m_BlockColorBegin;   // 进度条渐变开始颜色
    QColor m_BlockColorEnd;     // 进度条渐变结束颜色

    int m_Value;                // 当前进度值
    int m_Maximum;              // 最大值
    int m_Minimum;              // 最小值

    bool m_TextVisible;         // 文本是否可见
    QFont m_Font;               // 文本字体
    QColor m_FontColor;         // 文本颜色

    bool m_BgPixmapVisible;     // 背景图片是否可见
    QPixmap m_BgPixmap;         // 背景图片

    bool m_UncertainMode;       // 进度条为不确定模式
    int m_UncertainModeSpanAngle;// 不确定模式的角度跨度
    int m_UncertainModeAutoAngleCnt;// 不确定模式的起始角度
    QTimer m_UncertainModeUpdateTimer;// 不确定模式时用于定时刷新显示
};


#endif // CIRCLEPROGRESSBAR_H

circleprogressbar.cpp

源码Demo下载:

https://download.csdn.net/download/wu10188/89101821

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

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

相关文章

【完全背包求方案数问题】AcWing1023.买书(赋练习题目)

【题目链接】活动 - AcWing 输入样例1&#xff1a; 20输出样例1&#xff1a; 2输入样例2&#xff1a; 15输出样例2&#xff1a; 0输入样例3&#xff1a; 0输出样例3&#xff1a; 1 【代码】 //1023.买书——完全背包问题#include<bits/stdc.h>using namespace st…

我去,PMP原来不是所有人都能报!

很多人可能觉得PMP的报名条件很复杂&#xff0c;又是经验要求&#xff0c;又是学历要求的&#xff0c;网络上关于PMP报名条件说的层出不穷&#xff0c;今天给大家统一一下&#xff0c;报名PMP究竟需要什么条件&#xff1a; 官方报考条件&#xff1a; 一、报名考生必须具备35小…

【I2C总线驱动】

一、I2C总线背景知识 SOC芯片平台的外设分为&#xff1a; 一级外设&#xff1a;外设控制器集成在SOC芯片内部二级外设&#xff1a;外设控制器由另一块芯片负责&#xff0c;通过一些通讯总线与SOC芯片相连 Inter-Integrated Circuit&#xff1a; 字面意思是用于“集成电路之间…

多叉树题目:子树中标签相同的结点数

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;子树中标签相同的结点数 出处&#xff1a;1519. 子树中标签相同的结点数 难度 5 级 题目描述 要求 给你一个树&#xff08;即一个连通的无向无环图…

QT 使用redis ,连接并使用

一.redis安装 链接&#xff1a;https://pan.baidu.com/s/17fXKOj5M4VIypR0y5_xtHw 提取码&#xff1a;1234 1.下载得到文件夹如图 course_redis为安装包。 2.启动Redis服务 把安装包解压到某个路径下即可。 打开cmd窗口&#xff0c;切换到Redis安装路径&#xff0c;输入 r…

飞企互联-FE企业运营管理平台 druid路径 弱口令漏洞复现

0x01 产品简介 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据、物联网、移动互联网等技术支撑的云工作台。这个平台可以连接人、链接端、联通内外,支持企业B2B、C2B与O2O等核心需求,为不同行业客户的互联网+转型提供支持。 0x02 漏洞概述 飞企互联-FE企业…

AI编程005/ 逆向生成mysql的建表语句

1/ 通过insert into 语句生成建表语句 有些时候我们能获取到表的insert语句&#xff0c;但是没有表结构。我们可以借助AI工具&#xff0c;让其逆向生成mysql的建表语句。 提示词如下&#xff1a; 根据下面的SQL语句&#xff0c;逆向生存mysql的建表语句&#xff0c;每个字段…

所有网站都需要使用SSL证书?

SSL证书对于网站的重要性&#xff0c;简单来说就是&#xff1a; 保护隐私&#xff1a;就像给你的信封加了密码锁&#xff0c;SSL证书让网站和用户之间的所有交流都变得保密。当你在网站上输入密码、银行卡号等敏感信息时&#xff0c;有了SSL证书&#xff0c;这些信息就会被加密…

申请北京资产评估公司资产评估备案要什么条件

北京资产评估注册要求&#xff0c;很多人想办理资产评估公司&#xff0c;但是不知道怎么申请评估公司更快效率更高。我公司是专业办理资产评估公司的专业代理机构&#xff0c;能办理资产评估公司注册&#xff0c;资产评估公司人员代持&#xff0c;等一系列的服务&#xff0c;关…

谷歌DeepMind发布Gecko:专攻检索,与大7倍模型相抗衡

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 Gecko 是一种通用的文本嵌入模型&#xff0c;可用于训练包括文档检索、语义相似度和分类等各…

积木-蓝桥每日真题

0积木 - 蓝桥云课 (lanqiao.cn) 题目描述 小明用积木搭了一个城堡。 为了方便&#xff0c;小明在搭的时候用的是一样大小的正方体积木&#xff0c;搭在了一个n行m列的方格图上&#xff0c;每个积木正好占据方格图的一个小方格。 当然&#xff0c;小明的城堡并不是平面的&#x…

Docker 安装RabbitMQ以及使用客户端图形化界面

目录 一、点击进入docker 镜像仓库 1.1 直接在官网里 搜索 rabbitmq 1.2 在标签里 直接搜索3.10-management 因为这个标签包含用户操作界面 二、启动docker 2.1 首先拉取镜像&#xff1a; 2.2 Docker运行&#xff0c;并设置开机自启动 三、访问用户操作界面 一、点击进入…

算法练习第12天|● 239. 滑动窗口最大值● 347.前 K 个高频元素

239.滑动窗口的最大值 力扣原题 题目描述&#xff1a; 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff…

使用 Jenkins、Gitlab、Harbor、Helm、k8s 来实现流水线作业

文章目录 一、流程二、Dockerfile 使用 Jenkins、Gitlab、Harbor、Helm、Kubernetes 来实现一个完整的持续集成和持续部署的流水线作业 一、流程 开发人员提交代码到 Gitlab 代码仓库通过 Gitlab 配置的 Jenkins Webhook 触发 Pipeline 自动构建Jenkins 触发构建构建任务&…

C++设计模式:桥模式(五)

1、定义与动机 桥模式定义&#xff1a;将抽象部分&#xff08;业务功能&#xff09;与实现部分&#xff08;平台实现&#xff09;分离&#xff0c;使他们可以独立地变化引入动机&#xff1a; 由于某些类型的固有的实现逻辑&#xff0c;使得它们具有两个变化的维度&#xff0c;…

Jenkins 持续集成 【CICD】

持续集成 &#xff08;Continuous integration&#xff0c;简称CI&#xff09; 持续集成是一种开发实践&#xff0c;它倡导团队成员频繁的集成他们的工作&#xff0c;每次集成都通过自动化构建&#xff08;包括编译、构建、打包、部署、自动化测试&#xff09;来验证&#xff…

libVLC 提取视频帧

在前面的文章中&#xff0c;我们使用libvlc_media_player_set_hwnd设置了视频的显示的窗口。 libvlc_media_player_set_hwnd(vlc_mediaPlayer, (void *)ui.widgetShow->winId()); 如果我们想要提取每一帧数据&#xff0c;将数据保存到本地&#xff0c;该如何操作呢&#x…

思迈特软件与上海德拓签署战略合作协议,携手赋能企业数字化转型

3月27日&#xff0c;广州思迈特软件有限公司&#xff08;简称“思迈特软件”&#xff09;与上海德拓信息技术有限公司&#xff08;简称“德拓信息”&#xff09;正式签约建立战略合作伙伴关系。双方将在数字化转型、数据服务、数据应用以及市场资源等多个领域展开深度合作&…

Github上传大文件(>25MB)教程

0.在github中创建新的项目&#xff08;已创建可忽略这一步&#xff09; 如上图所示&#xff0c;点击New repository 进入如下页面&#xff1a; 1.下载Git LFS 下载git 2.打开gitbash 3.上传文件&#xff0c;代码如下: cd upload #进入名为upload的文件夹&#xff0c;提前…

距离度量方法——欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离

目录 一、 欧氏距离&#xff08;Euclidean Distance&#xff09; 1、简介 2、代码实现 二、曼哈顿距离&#xff08;Manhattan Distance&#xff09; 1、简介 2、代码实现 三、切比雪夫距离&#xff08;Chebyshev Distance&#xff09; 1、简介 2、代码实现 四、闵可夫…