From c92732fd98f3635ce6b5402a103540cf7bfd626e Mon Sep 17 00:00:00 2001 From: Volker Krause <vkrause@kde.org> Date: Tue, 20 Dec 2016 11:45:49 +0100 Subject: [PATCH] Don't leak line series of area plots This fixes dangling line series crashing when the model they still listen to resets. --- analyzer/analytics/analyticsview.cpp | 2 +- analyzer/chart.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/analyzer/analytics/analyticsview.cpp b/analyzer/analytics/analyticsview.cpp index acc556f..e0df60f 100644 --- a/analyzer/analytics/analyticsview.cpp +++ b/analyzer/analytics/analyticsview.cpp @@ -116,9 +116,9 @@ void AnalyticsView::setRESTClient(RESTClient* client) void AnalyticsView::setProduct(const Product& product) { + m_chart->setModel(nullptr); m_dataModel->setProduct(product); - m_chart->setModel(nullptr); ui->chartType->clear(); m_aggregatedDataModel->clear(); qDeleteAll(m_aggregationModels); diff --git a/analyzer/chart.cpp b/analyzer/chart.cpp index 419719e..bd7f7a5 100644 --- a/analyzer/chart.cpp +++ b/analyzer/chart.cpp @@ -70,8 +70,10 @@ void Chart::setModel(QAbstractItemModel* model) disconnect(m_model, &QAbstractItemModel::modelReset, this, &Chart::modelReset); m_model = model; - if (!model) + if (!model) { + m_chart->removeAllSeries(); return; + } connect(m_model, &QAbstractItemModel::modelReset, this, &Chart::modelReset); modelReset(); @@ -111,7 +113,7 @@ void Chart::modelReset() } else { QLineSeries *prevSeries = nullptr; for (int i = 1; i < colCount; ++i) { - auto series = new QLineSeries(this); + auto series = new QLineSeries; auto mapper = new QVXYModelMapper(series); mapper->setModel(m_model); @@ -121,6 +123,7 @@ void Chart::modelReset() mapper->setSeries(series); auto areaSeries = new QAreaSeries(series, prevSeries); + series->setParent(areaSeries); // otherwise series isn't deleted by removeAllSeries! areaSeries->setName(m_model->headerData(i, Qt::Horizontal).toString().toHtmlEscaped()); m_chart->addSeries(areaSeries); -- GitLab