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

效果如下:

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

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

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

可以选择添加背景图片

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

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

另外组件的整体尺寸,圆环粗细,各部分颜色,字体都是可以随意调整的,还支持QWidget的QSS语句调整背景色,外边框等。

仅有两个文件:

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

相关推荐

  1. Python实现进度

    2024-04-09 11:00:03       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 11:00:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 11:00:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 11:00:03       82 阅读
  4. Python语言-面向对象

    2024-04-09 11:00:03       91 阅读

热门阅读

  1. qt-4.8

    2024-04-09 11:00:03       40 阅读
  2. SpringBoot使用Websocket控制评测机

    2024-04-09 11:00:03       44 阅读
  3. 好用的前端框架及插件!!!

    2024-04-09 11:00:03       36 阅读
  4. MySQL-8. mysql索引

    2024-04-09 11:00:03       35 阅读
  5. Factory模式是什么呀

    2024-04-09 11:00:03       34 阅读
  6. qt day2

    qt day2

    2024-04-09 11:00:03      37 阅读
  7. Linux文件和目录管理及文本搜索命令find grep

    2024-04-09 11:00:03       37 阅读