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


仓库

个性
  • 可设置范畴值
  • 可设置大刻度数量,小刻度数量
  • 可设置开始旋转角度、完结旋转角度
  • 可设置是否启用动画、动画特效及每刻度动画持续时间
  • 可设置外圆背景、内圆背景、提醒指针、刻度尺、刻度值、提醒文字色彩
  • 可设置三色刻度占用比例
  • 自适应窗体拉伸、刻度尺和文字主动缩放
#ifndef DASHBOARD_H#define DASHBOARD_H#include <QColor>#include <QEasingCurve>#include <QPropertyAnimation>#include <QString>#include <QWidget>/* 通用仪表盘自定义控件 实现的性能 * 1. 可设置范畴值 * 2. 可设置大刻度数量,小刻度数量 * 3. 可设置开始旋转角度、完结旋转角度 * 4. 可设置是否启用动画、动画特效及每刻度动画持续时间 * 5. 可设置外圆背景、内圆背景、提醒指针、刻度尺、刻度值、提醒文字色彩 * 6. 可设置三色刻度占用比例 * 7. 自适应窗体拉伸、刻度尺和文字主动缩放 */class GenericDashBoard : public QWidget{    Q_OBJECT    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 curValue             READ getCurValue          WRITE updateValue)    Q_PROPERTY(int animationStepTime    READ getAnimationStepTime WRITE setAnimationStepTime)    Q_PROPERTY(int scaleMajor           READ getScaleMajor        WRITE setScaleMajor)    Q_PROPERTY(int scaleMinor           READ getScaleMinor        WRITE setScaleMinor)    Q_PROPERTY(int startAngle           READ getStartAngle        WRITE setStartAngle)    Q_PROPERTY(int endAngle             READ getEndAngle          WRITE setEndAngle)    Q_PROPERTY(int scalePercentage      READ getScalePercentage   WRITE setScalePercentage)    Q_PROPERTY(QColor  scaleNumColor    READ getScaleNumColor     WRITE setScaleNumColor)    Q_PROPERTY(QColor  outerCircleColor READ getOuterCircleColor  WRITE setOuterCircleColor)    Q_PROPERTY(QColor  innerCircleColor READ getInnerCircleColor  WRITE setInnerCircleColor)    Q_PROPERTY(QColor  scaleStartColor  READ getScaleStartColor   WRITE setScaleStartColor)    Q_PROPERTY(QColor  scaleEndColor    READ getScaleEndColor     WRITE setScaleEndColor)    Q_PROPERTY(QColor  pointerColor     READ getPointerColor      WRITE setPointerColor)    Q_PROPERTY(QColor  textColor        READ getTextColor         WRITE setTextColor)    Q_PROPERTY(QString suffixText       READ getSuffixText        WRITE setSuffixText)public:    explicit GenericDashBoard(QWidget *parent = nullptr);    ~GenericDashBoard();    int getMinValue()                   const;    int getMaxValue()                   const;    int getValue()                      const;    int getAnimationStepTime()          const;    int getScaleMajor()                 const;    int getScaleMinor()                 const;    int getStartAngle()                 const;    int getEndAngle()                   const;    QColor getScaleNumColor()           const;    QColor getOuterCircleColor()        const;    QColor getInnerCircleColor()        const;    QColor getScaleStartColor()         const;    QColor getScaleEndColor()           const;    QColor getPointerColor()            const;    QColor getTextColor()               const;    QString getSuffixText()             const;    QEasingCurve::Type getEasingCurve() const;    double getScalePercentage()         const;public slots:    void setRange(int minValue, int maxValue);                  // 设置范畴值    void setMinValue(int minValue);                             // 设置最小值    void setMaxValue(int maxValue);                             // 设置最大值    void setValue(int value);                                   // 设置目标值    void setAnimationStepTime(int msec);                        // 设置每刻度动画持续时间    void setScaleMajor(int scaleMajor);                         // 设置主刻度数量    void setScaleMinor(int scaleMinor);                         // 设置小刻度数量    void setAngleRange(int startAngle, int endAngle);           // 设施旋转角度范畴    void setStartAngle(int startAngle);                         // 设置开始旋转角度    void setEndAngle(int endAngle);                             // 设置完结旋转角度    void setScaleNumColor(const QColor &scaleNumColor);         // 设置刻度值色彩    void setOuterCircleColor(const QColor &outerCircleColor);   // 设置外圆色彩    void setInnerCircleColor(const QColor &innerCircleColor);   // 设置内圆色彩    void setScalePercentage(double percentage);                 // 设置刻度百分比 【对应 m_scaleStartColor m_scaleEndColor】    // 设置刻度两种色彩    void setScaleStartColor(const QColor &scaleStartColor);    void setScaleEndColor(const QColor &scaleEndColor);    void setPointerColor(const QColor &pointerColor);           // 设置指针色彩    void setTextColor(const QColor &textColor);                 // 设置提醒文本色彩    void setSuffixText(const QString &string);                  // 设置提醒文字    void setEasingCurve(QEasingCurve::Type type);               // 设置指针动画类型protected:    void paintEvent(QPaintEvent *event) override;    void drawBackground(QPainter *painter);                     // 绘制背景    void drawScale(QPainter *painter);                          // 绘制刻度    void drawScaleNum(QPainter *painter);                       // 绘制刻度值    void drawPainterIndicator(QPainter *painter);               // 绘制指示器    void drawText(QPainter *painter);                           // 绘制提醒文本    int getCurValue() const;    void updateValue(int value);                                // 更新表盘值        【次要在指针动画时应用】signals:    void valueChanged(int value);    void finished();private:    int m_radius = 0;                                           // 仪表盘半径    QColor  m_outerCircleColor = QColor(172, 172, 172);         // 外圆背景色        【类比于手表金属外框】    QColor  m_innerCircleColor = QColor(40, 40, 40);            // 内圆背景色        【类比于手表玻璃显示区域】    QColor  m_scaleStartColor  = QColor(84, 84, 84);            // 刻度开始局部色彩    QColor  m_scaleEndColor    = QColor(Qt::red);               // 刻度完结局部色彩   【如:没油、转速等告警提醒】    QColor  m_scaleNumColor    = QColor(255,255,255);           // 刻度值色彩    QColor  m_pointerColor     = QColor(250, 50, 50);           // 指针色彩    QColor  m_textColor      = QColor(255,255,255);             // 提醒文本色彩    int m_curValue         = 0;                                 // 表盘指针以后值     【次要在指针动画时应用】    int m_value            = 0;                                 // 表盘指针最终指向的值    int m_minValue         = 0;                                 // 表盘最小值    int m_maxValue         = 240;                               // 表盘最大值    int m_startAngle       = 45;                                // 刻度盘起始角度    int m_endAngle         = 315;                               // 刻度盘完结角度    int m_scaleMajor       = 10;                                // 大刻度数量    int m_scaleMinor       = 5;                                 // 小刻度数量        【如:总刻度数量 = scaleMajor * scaleMinor】    double m_scalePercentage = 0.8;                             // 表盘刻度划分百分比 【对应 m_scaleStartColor m_scaleEndColor】    QString m_suffixText     = "Km/h";                          // 提醒文本后缀      【如:Km/h 等】    QPropertyAnimation m_animation;                             // 指针属性动画    int m_animationStepTime   = 50;                             // 每刻度动画持续时间    QEasingCurve::Type m_easingCurveType = QEasingCurve::OutQuad; // 指针动画弛缓曲线类型};#endif // DASHBOARD_H