关于c++:Qt-自定义组件水波进度条

46次阅读

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

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


仓库

个性

  • 可设置范畴值
  • 可设置起始角度
  • 可设置水波密度,密度越大浪越大
  • 可设置水波高度,高度越大浪越大
  • 可设置是否显示进度条
  • 可设置是否显示水纹
  • 可设置进度色、水纹色、文字色
  • 可设置进度条前进方向
#ifndef WAREPROGRESSBAR_H
#define WAREPROGRESSBAR_H

#include <QColor>
#include <QString>
#include <QTimer>
#include <QWidget>

/* 多彩仪表盘自定义控件 实现的性能
 * 1. 可设置范畴值
 * 2. 可设置起始角度
 * 3. 可设置水波密度,密度越大浪越大
 * 4. 可设置水波高度,高度越大浪越大
 * 5. 可设置是否显示进度条
 * 6. 可设置是否显示水纹
 * 7. 可设置进度色、水纹色、文字色
 * 8. 可设置进度条前进方向
 */

class WareProgressBar : public QWidget
{
    Q_OBJECT

    Q_PROPERTY(QColor  outerCircleColor       READ getPieCircleColor           WRITE setPieCircleColor)
    Q_PROPERTY(QColor  waterColor             READ getwaterColor               WRITE setwaterColor)
    Q_PROPERTY(QColor  textColor              READ getTextColor                WRITE setTextColor)
    Q_PROPERTY(int     pieStartAngle          READ getPieStartAngle            WRITE setPieStartAngle)
    Q_PROPERTY(int     value                  READ getValue                    WRITE setValue)
    Q_PROPERTY(int     maxValue               READ getMaxValue                 WRITE setMaxValue)
    Q_PROPERTY(int     minValue               READ getMinValue                 WRITE setMinValue)
    Q_PROPERTY(int     waveDensity            READ getWaveDensity              WRITE setWaveDensity)
    Q_PROPERTY(int     waveHeight             READ getWaveHeight               WRITE setWaveHeight)
    Q_PROPERTY(QString suffixText             READ getSuffixText               WRITE setSuffixText)
    Q_PROPERTY(bool    waveForwardOrientation READ getWaveIsForwardOrientation WRITE setWaveIsForwardOrientation)
    Q_PROPERTY(bool    waterIsvisible         READ getWaterIsvisible           WRITE setWaterIsvisible)
    Q_PROPERTY(bool    peiCircleIsvisible     READ getPeiCircleIsvisible       WRITE setPeiCircleIsvisible)
    Q_PROPERTY(bool    peiForwardOrientation  READ getPeiIsForwardOrientation  WRITE setPeiIsForwardOrientation)

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

    QColor getPieCircleColor()               const;
    QColor getwaterColor()                   const;
    QColor getTextColor()                    const;
    int getPieStartAngle()                   const;
    int getValue()                           const;
    int getMaxValue()                        const;
    int getMinValue()                        const;
    int getWaveDensity()                     const;
    int getWaveHeight()                      const;
    QString getSuffixText()                  const;
    bool getWaveIsForwardOrientation()       const;
    bool getWaterIsvisible()                 const;
    bool getPeiCircleIsvisible()             const;
    bool getPeiIsForwardOrientation()        const;

public slots:

    void setPieCircleColor(const QColor &color);                // 设置外圆色彩
    void setwaterColor(const QColor &color);                    // 设置水色彩
    void setTextColor(const QColor &color);                     // 设置文本色彩
    void setPieStartAngle(int angle);                           // 设置饼图起始角度
    void setValue(int value);                                   // 设置开始值
    void setRange(int minValue, int maxValue);                  // 设置范畴值
    void setMaxValue(int value);                                // 设置最大值
    void setMinValue(int value);                                // 设置最小值
    void setWaveDensity(int density);                           // 设置水波密度 [0 - 10]
    void setWaveHeight(int height);                             // 设置水波高度 [0 - 10]
    void setSuffixText(const QString &text);                    // 设置提醒文本
    void setWaveIsForwardOrientation(bool Orientation);         // 设置水波方向 [true 正向;false 反向]
    void setWaterIsvisible(bool visible);                       // 设置水是否可见
    void setPeiCircleIsvisible(bool visible);                   // 设置圆饼否可见
    void setPeiIsForwardOrientation(bool Orientation);          // 设置圆饼前进方向

protected:
    void paintEvent(QPaintEvent *event) override;
    void drawPieCircel(QPainter *painter);
    void drawBackground(QPainter *painter);
    void drawWater(QPainter *painter);
    void drawText(QPainter *painter);

private:
    double m_radius               = 0.0;

    QColor m_peiCircleColor       = QColor(100,184,255);
    QColor m_waterColor           = QColor(100,184,255);
    QColor m_textColor            = QColor(250,250,250);
    int m_pieStartAngle           = 0;
    int m_value                   = 0;
    int m_maxValue                = 100;
    int m_minValue                = 0;
    int m_waveDensity             = 1;
    int m_waveHeight              = 5;
    bool m_waveForwardOrientation = true;
    QString m_suffixText          = "%";
    bool m_waterIsvisible         = true;
    bool m_peiCircleIsvisible     = true;
    bool m_peiForwardOrientation  = true;

    double m_offset               = 50;
    QTimer m_timer;
};

#endif // WAREPROGRESSBAR_H

正文完
 0