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