使用customplot实现绘制千万点的代码,这千万点一秒刷新一次显示,每一秒都是不同的点。请.cpp代码和.h代码一起提供
时间: 2024-03-16 08:42:35 浏览: 65
vc++.net编写画图程序,利用坐标来显示每一秒钟显示一侦
以下是使用customplot实现绘制千万点的代码,其中千万个点每秒刷新一次显示,每一秒都是不同的点。请注意,这段代码仅供参考,需要根据实际情况进行修改和优化。
mainwindow.h:
```cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "qcustomplot.h"
#include <QTimer>
#include <QVector>
#include <QRandomGenerator>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void onTimer();
private:
Ui::MainWindow *ui;
QTimer *m_timer;
QVector<double> m_data;
};
#endif // MAINWINDOW_H
```
mainwindow.cpp:
```cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 初始化 CustomPlot
ui->customPlot->addGraph();
ui->customPlot->graph(0)->setPen(QPen(Qt::blue));
ui->customPlot->xAxis->setLabel("X");
ui->customPlot->yAxis->setLabel("Y");
ui->customPlot->xAxis->setRange(0, 10000000);
ui->customPlot->yAxis->setRange(-1.5, 1.5);
ui->customPlot->replot();
// 初始化定时器
m_timer = new QTimer();
connect(m_timer, SIGNAL(timeout()), this, SLOT(onTimer()));
// 启动定时器
m_timer->start(1000); // 每秒刷新一次
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onTimer()
{
// 更新数据
m_data.clear();
m_data.reserve(10000000);
for (int i = 0; i < 10000000; i++)
{
m_data.append(QRandomGenerator::global()->bounded(-1.0, 1.0));
}
// 绘制图形
ui->customPlot->graph(0)->setData(QVector<double>::fromStdVector(m_data));
ui->customPlot->replot();
}
```
需要注意的是,在更新数据时,要先将 m_data 清空,再重新分配内存。这样可以避免内存泄漏和内存浪费的问题。
阅读全文