首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有大数据的QChart和QAreaSeries非常慢。

具有大数据的QChart和QAreaSeries非常慢。
EN

Stack Overflow用户
提问于 2021-04-14 12:41:25
回答 1查看 264关注 0票数 0

我正在使用QCharts (使用区域图示例作为模板)。

我正在绘制一个区域图,在每个系列中有10000点,我发现它非常慢,窗口显示和调整窗口大小会导致进程挂起,它在这个数据集中无法使用。有什么不对的地方吗?我已经看到,禁用反混叠可能有帮助,但它没有。

我有个折叠式代码

代码语言:javascript
运行
复制
#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();
}

有什么想法吗?这里有什么问题?

EN

回答 1

Stack Overflow用户

发布于 2022-01-20 15:25:12

我们在前几次跳到了这个阶段,发现QXYSeries中append()的实现不是最优的,并且花费了大量的时间处理大型数据集。

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

代码语言:javascript
运行
复制
  void QXYSeries::replace(QVector<QPointF> points)

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

对于大型数据集,由于用于呈现系列的图形项的构造,可能仍然存在性能问题,这取决于系列的类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67091992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档