Qt模仿声波震荡条

经常看到音乐播放器上有类似的地方,索性简单做一个。
效果图
在这里插入图片描述
头文件

#ifndef QWHSOUNDWAVE_H
#define QWHSOUNDWAVE_H

/*
 * 声波震荡条
 */

#include <QWidget>
#include <QPaintEvent>
#include <QPainter>
#include <QTimer>
#include <QPropertyAnimation>


class QWHSoundWave : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(int m_factor READ getFactor WRITE setFactor)
public:
    explicit QWHSoundWave(QWidget *parent = nullptr);

public:
    //设置声波条数
    void setWaveCount(int waveCount);
    //设置声波间距
    void setWaveSpaceing(int waveSpacing);
    //设置背景颜色
    void setBgColor(QColor color);
    //设置声波颜色
    void setWaveColor(QColor color);
    //设置循环间隔(声波上下一次为一个循环)
    void setInterval(int msecs);

    //获取声波条数
    int getWaveCount()      const;
    //获取声波间距
    int getWaveSpacing()    const;
    //获取背景颜色
    QColor getBgColor()     const;
    //获取声波颜色
    QColor getWaveColor()   const;
    //获取循环间隔(声波上下一次为一个循环)
    int getInterval()       const;

protected:
    void paintEvent(QPaintEvent *event);
    //绘制背景
    void drawBg(QPainter *painter);
    //绘制声波
    void drawWave(QPainter *painter);

private:
    void setFactor(int factor);
    int getFactor() const;

private slots:
    void onTimeout();

private:
    int m_waveCount;                    //声波条数
    int m_waveSpacing;                  //声波间距
    QColor m_bgColor;                   //背景颜色
    QColor m_waveColor;                 //声波颜色
    int m_interval;                     //定时器间隔
    int m_factor;                       //动画因子

    QTimer *m_timer;                    //定时器
    QPropertyAnimation *m_animation;    //属性动画
};

#endif // QWHSOUNDWAVE_H
发布了228 篇原创文章 · 获赞 44 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_40945965/article/details/104409971