乐趣区

关于c++:Qt-自定义组件圆弧进度条

自定义组件_滚动横幅 & 弹窗 & 对话框 & 字体图标等
自定义组件_圆弧进度条
自定义组件_水波进度条
自定义组件_多彩仪表盘
自定义组件_通用仪表盘


仓库

个性

  • 可设置范畴
  • 可设置开始旋转角度、完结旋转角度
  • 可设置适度动画时常
  • 可设置仪表盘题目
  • 可设置背景、进度条、值、题目色彩
  • 自适应窗体拉伸,文字主动缩放
#ifndef ARCPROGRESSBAR_H
#define ARCPROGRESSBAR_H

#include <QWidget>
#include <QColor>
#include <QString>
#include <QPropertyAnimation>

/* 圆弧进度条自定义控件 实现的性能
 * 1. 可设置范畴
 * 2. 可设置开始旋转角度、完结旋转角度
 * 3. 可设置适度动画时常
 * 4. 可设置仪表盘题目
 * 5. 可设置背景、进度条、值、题目色彩
 * 6. 自适应窗体拉伸,文字主动缩放
 */

class ArcProgressBar : public QWidget
{
    Q_OBJECT

    Q_PROPERTY(QColor arcColor        READ getArcColor          WRITE setArcColor)
    Q_PROPERTY(QColor baseColor       READ getBaseColor         WRITE setBaseColor)
    Q_PROPERTY(QColor textColor       READ getTextColor         WRITE setTextColor)
    Q_PROPERTY(QColor titleColor      READ getTitleColor        WRITE setTitleColor)
    Q_PROPERTY(QString title          READ getTitle             WRITE setTitle)
    Q_PROPERTY(int minValue           READ getMinValue          WRITE setMinValue)
    Q_PROPERTY(int maxValue           READ getMaxValue          WRITE setMaxValue)
    Q_PROPERTY(int value              READ getValue             WRITE setValue)
    Q_PROPERTY(int animationStepTime  READ getAnimationStepTime WRITE setAnimationStepTime)
    Q_PROPERTY(int startAngle         READ getStartAngle        WRITE setStartAngle)
    Q_PROPERTY(int endAngle           READ getEndAngle          WRITE setEndAngle)
    Q_PROPERTY(int curValue           READ getCurValue          WRITE updateValue)

public:
    explicit ArcProgressBar(QWidget *parent = nullptr);
    ~ArcProgressBar();

    QColor getArcColor()       const;
    QColor getBaseColor()      const;
    QColor getTextColor()      const;
    QColor getTitleColor()     const;
    QString getTitle()         const;
    int getMinValue()          const;
    int getMaxValue()          const;
    int getValue()             const;
    int getStartAngle()        const;
    int getEndAngle()          const;
    int getAnimationStepTime() const;

public slots:
    void setArcColor(const QColor &color);              // 设置圆弧色彩
    void setBaseColor(const QColor &color);             // 设置根底色彩
    void setTextColor(const QColor &color);             // 设置文本色彩
    void setTitleColor(const QColor &color);            // 设置题目色彩

    void setTitle(const QString &title);                // 设置 Title

    void setRange(int minValue, int maxValue);          // 设置范畴值
    void setMinValue(int minValue);                     // 设置最小值
    void setMaxValue(int maxValue);                     // 设置最大值
    void setValue(int value);                           // 设置目标值

    void setAngleRange(int startAngle, int endAngle);   // 设施旋转角度范畴
    void setStartAngle(int startAngle);                 // 设置开始旋转角度
    void setEndAngle(int endAngle);                     // 设置完结旋转角度

    void setAnimationStepTime(int msec);                // 设置每刻度动画持续时间

protected:
    void paintEvent(QPaintEvent *event) override;

    void drawArc(QPainter *painter);
    void drawValue(QPainter *painter);
    void drawTitle(QPainter *painter);

    void updateValue(int value);
    int getCurValue() const;

signals:

private:
    double m_radius = 0.0;

    QColor m_arcColor   = QColor(34,163,169);
    QColor m_baseColor  = QColor(180,180,180);
    QColor m_textColor  = QColor(34,163,169);
    QColor m_titleColor =  QColor(Qt::black);

    QString m_title     = "正确率";

    int m_startAngle    = 45;
    int m_endAngle      = 315;

    int m_maxValue      = 100;
    int m_minValue      = 0;
    int m_curValue      = 0;
    int m_value         = 0;

    QPropertyAnimation m_animation;
    int m_animationStepTime              = 5;
    QEasingCurve::Type m_easingCurveType = QEasingCurve::Linear;
};

#endif // ARCPROGRESSBAR_H
退出移动版