qt5.12.12中绘制播放音乐动态直方图源码
时间: 2023-10-26 13:02:47 浏览: 88
以下是一段使用Qt5.12.12绘制播放音乐动态直方图的源代码:
```cpp
#include <QtWidgets>
class MusicWidget : public QWidget
{
public:
MusicWidget(QWidget *parent = nullptr)
: QWidget(parent)
{
setFixedSize(400, 300);
}
void setAudioData(const QVector<double> &data)
{
audioData = data;
update();
}
protected:
void paintEvent(QPaintEvent *event) override
{
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
int columnWidth = width() / audioData.size();
// 绘制直方图
for (int i = 0; i < audioData.size(); ++i)
{
int columnHeight = height() * audioData[i];
QPoint topLeft(i * columnWidth, height() - columnHeight);
QColor columnColor(Qt::red);
columnColor.setAlphaF(0.5);
painter.setBrush(columnColor);
painter.drawRect(QRect(topLeft, QSize(columnWidth, columnHeight)));
}
}
private:
QVector<double> audioData;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 生成随机音频数据
QVector<double> audioData;
for (int i = 0; i < 100; ++i)
{
double value = qrand() / static_cast<double>(RAND_MAX);
audioData.append(value);
}
MusicWidget musicWidget;
musicWidget.setAudioData(audioData);
musicWidget.show();
return app.exec();
}
```
这段代码创建了一个名为`MusicWidget`的QWidget子类,用于绘制动态直方图。在构造函数中,设置了窗口的固定大小。`setAudioData`函数用于设置音频数据,当音频数据改变时,调用`update`函数触发重新绘制。
在`paintEvent`函数中,通过QPainter类进行绘制操作。首先,设置了绘制抗锯齿效果。然后,根据音频数据的大小,计算出每个直方图列的宽度。接着,使用循环遍历音频数据并绘制每个直方图列。绘制使用了Qt引擎中的QPainter类的drawRect函数,根据数据值计算出直方图的高度,并设定矩形的位置和尺寸。绘制完成后,显示窗口。
在main函数中,首先生成了一个随机音频数据,然后创建MusicWidget对象,并将音频数据设置到该对象中,最后显示窗口并启动应用程序的事件循环。
阅读全文