自定义组件_滚动横幅&弹窗&对话框&字体图标等
自定义组件_圆弧进度条
自定义组件_水波进度条
自定义组件_多彩仪表盘
自定义组件_通用仪表盘
仓库
个性
- 可设置范畴值
- 可设置大刻度数量,小刻度数量
- 可设置开始旋转角度、完结旋转角度
- 可设置是否启用动画、动画特效及每刻度动画持续时间
- 可设置外圆背景、内圆背景、提醒指针、刻度尺、刻度值、提醒文字色彩
- 可设置三色刻度占用比例
- 自适应窗体拉伸、刻度尺和文字主动缩放
#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