0

我正在玩 QCharts(使用面积图示例作为模板)。

我正在绘制一个在每个系列中包含 10000 个点的面积图,并且发现它非常慢,窗口出现 30 秒并且调整窗口大小导致进程挂起,它对这个数据集不可用。任何想法这里可能有什么问题?我已经看到禁用抗锯齿可能会有所帮助,但它没有。

我有以下代码


#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QAreaSeries>
#include <QRandomGenerator>

#include <QDateTime>
#include <QtCharts/QHXYModelMapper>
#include <QTimer>

#include "boost/range/irange.hpp"

QT_CHARTS_USE_NAMESPACE


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    auto *upper = new QLineSeries;
    auto *lower = new QLineSeries;
    auto *generator = QRandomGenerator::global();

    const auto maxSamples = 10000;

    for(auto x : boost::irange(0, maxSamples))
    {
        lower->append(QPointF(x, 0));
        upper->append(QPointF(x, generator->bounded(0, 100)));
    }

    auto *series = new QAreaSeries(upper, lower);

    QChart *chart = new QChart();
    chart->addSeries(series);
    chart->createDefaultAxes();
    chart->legend()->setVisible(false);

    chart->axisY(series)->setRange(0, 100);

    QChartView *chartView = new QChartView(chart);
    //chartView->setRenderHint(QPainter::Antialiasing);

    QMainWindow window;
    window.setCentralWidget(chartView);
    window.resize(800, 600);
    window.show();

    return a.exec();
}


有什么想法可能是这里的问题吗?

4

1 回答 1

0

我们回到这个时代,发现 QXYSeries 中 append() 的实现不是最理想的,并且在处理大型数据集时会花费大量时间。

为了提高性能,我们现在使用:

  void QXYSeries::replace(QVector<QPointF> points)

使用我们首先分配给数据集大小的局部向量,然后填充实际数据。

对于大型数据集,由于用于渲染系列的图形项目的构造,您可能仍然会遇到性能问题,具体取决于系列的类型。

于 2022-01-20T15:25:12.017 回答