diff options
-rw-r--r-- | src/charts/chartitem.cpp | 5 | ||||
-rw-r--r-- | src/charts/chartitem_p.h | 2 | ||||
-rw-r--r-- | src/charts/chartpresenter.cpp | 2 | ||||
-rw-r--r-- | src/charts/piechart/piechartitem.cpp | 27 | ||||
-rw-r--r-- | src/charts/piechart/piechartitem_p.h | 2 |
5 files changed, 28 insertions, 10 deletions
diff --git a/src/charts/chartitem.cpp b/src/charts/chartitem.cpp index 8bdf68a3..1b745559 100644 --- a/src/charts/chartitem.cpp +++ b/src/charts/chartitem.cpp @@ -39,6 +39,11 @@ AbstractDomain* ChartItem::domain() const return m_series->domain(); } +void ChartItem::cleanup() +{ + disconnect(); +} + void ChartItem::handleDomainUpdated() { qWarning() << __FUNCTION__<< "Slot not implemented"; diff --git a/src/charts/chartitem_p.h b/src/charts/chartitem_p.h index b64a8ce6..833fc60f 100644 --- a/src/charts/chartitem_p.h +++ b/src/charts/chartitem_p.h @@ -44,6 +44,8 @@ class ChartItem : public ChartElement public: ChartItem(QAbstractSeriesPrivate *series,QGraphicsItem* item); AbstractDomain* domain() const; + virtual void cleanup(); + public Q_SLOTS: virtual void handleDomainUpdated(); diff --git a/src/charts/chartpresenter.cpp b/src/charts/chartpresenter.cpp index 96fcefee..b95a1268 100644 --- a/src/charts/chartpresenter.cpp +++ b/src/charts/chartpresenter.cpp @@ -138,7 +138,7 @@ void ChartPresenter::handleSeriesRemoved(QAbstractSeries *series) { ChartItem *chart = series->d_ptr->m_item.take(); chart->hide(); - chart->disconnect(); + chart->cleanup(); series->disconnect(chart); chart->deleteLater(); if (chart->animation()) diff --git a/src/charts/piechart/piechartitem.cpp b/src/charts/piechart/piechartitem.cpp index 273125de..a2ce330f 100644 --- a/src/charts/piechart/piechartitem.cpp +++ b/src/charts/piechart/piechartitem.cpp @@ -60,15 +60,7 @@ PieChartItem::PieChartItem(QPieSeries *series, QGraphicsItem* item) PieChartItem::~PieChartItem() { - // slices deleted automatically through QGraphicsItem - if (m_series) { - m_series->disconnect(this); - QPieSeriesPrivate::fromSeries(m_series)->disconnect(this); - } - foreach (QPieSlice *slice, m_sliceItems.keys()) { - slice->disconnect(this); - QPieSlicePrivate::fromSlice(slice)->disconnect(this); - } + cleanup(); } void PieChartItem::setAnimation(PieAnimation *animation) @@ -81,6 +73,23 @@ ChartAnimation *PieChartItem::animation() const return m_animation; } +void PieChartItem::cleanup() +{ + ChartItem::cleanup(); + + // slice items deleted automatically through QGraphicsItem + if (m_series) { + m_series->disconnect(this); + QPieSeriesPrivate::fromSeries(m_series)->disconnect(this); + m_series = 0; + } + foreach (QPieSlice *slice, m_sliceItems.keys()) { + slice->disconnect(this); + QPieSlicePrivate::fromSlice(slice)->disconnect(this); + } + m_sliceItems.clear(); +} + void PieChartItem::handleDomainUpdated() { QRectF rect(QPointF(0,0),domain()->size()); diff --git a/src/charts/piechart/piechartitem_p.h b/src/charts/piechart/piechartitem_p.h index 98593ba1..dc115e64 100644 --- a/src/charts/piechart/piechartitem_p.h +++ b/src/charts/piechart/piechartitem_p.h @@ -71,6 +71,8 @@ public Q_SLOTS: void setAnimation(PieAnimation *animation); ChartAnimation *animation() const; + // From ChartItem + void cleanup(); private: PieSliceData updateSliceGeometry(QPieSlice *slice); |