我想绘制一些每100毫秒就要来的大数据块(3k)。我尝试使用准确的3k点尝试QCustomPlotQwt,使用Qwt绘图时获得了非常好的性能,而使用QCustomPlot则获得了非常差的性能。而且我认为我在QCustomPlot上表现不佳,我在QCustomPlot中使用了以下代码(此示例来自QCustomPlot plot-examples,我编辑了函数setupQuadraticDemo):

void  MainWindow::setupQuadraticDemo(QCustomPlot *customPlot)
{
 demoName = "Quadratic Demo";
 customPlot->addGraph();
 customPlot->setNotAntialiasedElements(QCP::AntialiasedElement::aeAll);

 customPlot->xAxis->setRange(0, 1000);
 customPlot->yAxis->setRange(0, 1000);

 customPlot->xAxis->setLabel("x");
 customPlot->yAxis->setLabel("y");

 connect(&dataTimer, &QTimer::timeout, this, [customPlot]
 {
  constexpr auto length = 3000;
  QVector<double> x(length), y(length);

  std::srand(std::time(nullptr));

  for (int i = 0; i < length; ++i)
  {
   x[i] = std::rand() % 1000;
   y[i] = std::rand() % 1000;
  }

  customPlot->graph(0)->setData(x, y, true);

  customPlot->replot();
 });

 dataTimer.start(100);
}
this code表示Qwt。我对QCustomPlot做错了吗?为什么绘图太慢?

最佳答案

我想问题的根源在于代码本身。您正在以错误的方式更新点。您必须从代码中删除以下行

std::srand(std::time(nullptr));
这行代码将强制将rand()的种子固定固定的时间(如果我想精确地说,您的种子值已固定为1 second),因此,无论数据本身是否已更新,您都无法看到任何更改,因为重新绘制是将在该持续时间内绘制相同的点(1 sec)。

关于c++ - 为什么QCustomPlot在绘制大数据时太慢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64489118/

10-10 07:24