#pragma once
#include
#include
#include
#include
#include
#include
class WaveformWidget : public QWidget {
Q_OBJECT
public:
explicit WaveformWidget(QWidget* parent = nullptr) :
QWidget(parent),
m_data(1000, 0),
m_pixmap(QSize(1000, 300)),
m_timer(new QTimer(this))
{
// 设置定时器,控制波形图的刷新速度
m_timer->setInterval(50);
connect(m_timer, &QTimer::timeout, this, &WaveformWidget::onTimeout);
QHBoxLayout* layout = new QHBoxLayout();
QLabel* label = new QLabel();
layout->addWidget(label);
setLayout(layout);
m_label = label;
}
~WaveformWidget() override {
delete m_timer;
}
void start() {
m_timer->start();
}
void stop() {
m_timer->stop();
}
private:
void paintEvent(QPaintEvent* event) override {
QPainter painter(this);
painter.drawPixmap(rect(), m_pixmap);
}
void onTimeout() {
// 更新数据
for (int i = 1; i < m_data.size(); ++i) {
m_data[i - 1] = m_data[i];
}
m_data[m_data.size() - 1] = rand() % 200;
// 更新图像
QPixmap oldPixmap = m_pixmap;
QPainter painter(&m_pixmap);
painter.fillRect(m_pixmap.rect(), Qt::black);
QColor color(0, 255, 0);
painter.setPen(color);
QPoint prevPoint(-1, -1);
for (int i = 0; i < m_data.size(); ++i) {
int x = i;
int y = 300 - m_data[i];
QPoint point(x, y);
if (prevPoint.x() != -1) {
painter.drawLine(prevPoint, point);
}
prevPoint = point;
}
if (oldPixmap.size() != m_pixmap.size()) {
m_label->setFixedSize(m_pixmap.size());
}
m_label->setPixmap(m_pixmap);
update();
}
private:
QVector m_data;
QPixmap m_pixmap;
QTimer* m_timer;
QLabel* m_label;
};
一个Qt/C++ Demo,用于实现一个用于显示波形图的控件效果
2023-04-23 浏览:
标签ad报错:该广告ID(7)不存在。
Code Demo
- 热门标签
-
- 最新发布
-
- Qt 信号槽与原编译系统(2024-06-04)
- Qt信号槽关联中使用普通变量关联(包含不修改和修改槽内数据两种)、使用引用变量关联对(2023-05-05)
- 一个qt/c++ demo,用于显示 Koch Snowflake (科赫雪花) 分(2023-04-24)
- 一个qt/c++ demo,用于显示 Peano Curve(皮亚诺曲线) 分形图(2023-04-24)
- 一个qt/c++ demo,用于显示 Apollonian Gasket(阿波罗尼恩(2023-04-24)
- 一个qt/c++ demo,用于显示 Terdragon Curve(三头龙曲线)(2023-04-24)
- 一个qt/c++ demo,用于显示 Spiral Fractal(螺旋分形) 分形(2023-04-24)
- 一个qt/c++ demo,用于显示 Sierpinski Tetrahedron((2023-04-24)
- 一个qt/c++ demo,用于显示 Gasket Fractal(镂垫分形) 分(2023-04-24)
- 一个qt/c++ demo,用于显示 Hexagonal Gosper Curve(2023-04-24)
- 半年热点
-
-
一个Qt/C++ Demo,用于实现一个用于显示3D瀑布图的控件效果
浏览: 1067
-
一个qt/c++ demo,用于显示分星图
浏览: 1005