![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d2a8d2e3dc3a3589025722ffd9b8349b.gif)
#ifndef WAVEWIDGET_H
#define WAVEWIDGET_H
#include <QWidget>
class WaveWidget : public QWidget
{
Q_OBJECT
public:
explicit WaveWidget(QWidget *parent = nullptr);
void appendData(int *wave, int len);
protected:
void paintEvent(QPaintEvent *event);
private:
int m_wave[1920];
int m_index;
int m_width;
};
#endif
#include "wavewidget.h"
#include <QPainter>
#include <QDebug>
WaveWidget::WaveWidget(QWidget *parent) : QWidget(parent)
{
m_index = 0;
m_width = width() > 1920 ? 1920 : width();
memset(m_wave, 0, sizeof (m_wave));
}
void WaveWidget::appendData(int *wave, int len)
{
m_width = width() > 1920 ? 1920 : width();
for (int i = 0; i < len; i++) {
m_wave[(m_index + i) % m_width] = wave[i];
}
m_index = (m_index + len) % m_width;
update();
}
void WaveWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.fillRect(0, 0, width(), height(), QBrush(Qt::black));
painter.setPen(Qt::green);
for (int i = 1; i < m_width; i++) {
painter.drawLine(i - 1, height() / 2 - m_wave[i - 1],
i, height() / 2 - m_wave[i]);
}
painter.setPen(Qt::black);
for (int i = -1; i < 20; i++)
painter.drawLine((m_index + i) % m_width, 0, (m_index + i) % m_width, height());
}