关于c++:Qt-自定义组件通用仪表盘

39次阅读

共计 4612 个字符,预计需要花费 12 分钟才能阅读完成。

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


仓库

个性

  • 可设置范畴值
  • 可设置大刻度数量,小刻度数量
  • 可设置开始旋转角度、完结旋转角度
  • 可设置是否启用动画、动画特效及每刻度动画持续时间
  • 可设置外圆背景、内圆背景、提醒指针、刻度尺、刻度值、提醒文字色彩
  • 可设置三色刻度占用比例
  • 自适应窗体拉伸、刻度尺和文字主动缩放
#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

正文完
 0