我正在写一个研究项目,我需要绘制一个依赖于实时的函数。我使用了 QCustomPlot。当我按下按钮时,该图应该开始绘制。所以我写了下一个代码
void MainWindow::on_pushButton_restart_clicked()
{
...
my_timer->restart();
/* Set up and initialize the graph plotting timer */
connect(&timer_plot, SIGNAL(timeout()), this, SLOT(realtimePlot())); // where QTimer timer_plot
timer_plot.start(20);
}
realtimePlot()
好像
void MainWindow::realtimePlot()
{
ui->widget->graph(0)->data()->clear();
double key = my_timer->elapsed() / 1000.0;
static double lastPointKey = 0;
if(key - lastPointKey > 0.002)
{
for (auto& iter : x) {
ui->widget->graph(0)->addData(iter, sin(iter+key));
}
lastPointKey = key;
}
ui->widget->replot();
}
它工作正常,但是当我想重新启动绘图并再次按下按钮时,在绘制绘图之前会有一个延迟,并且随着每次单击按钮而增加,并且绘图的动画变得越来越不流畅。为什么会发生这种情况,我该如何解决?
在这里,您可以观看我的截屏视频。
我从这里获取的实时绘图代码
和MainWindow()
QVector<double> x;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->widget->addGraph();
ui->widget->xAxis->setRange(0, 20);
my_timer->start();
h = 0.05;
x.push_back(0);
for (int i=1; i<=20/h; i++)
{
x.push_back(i*h);
}
}