经常看到音乐播放器上有类似的地方,索性简单做一个。
效果图
头文件
#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