summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/charts/chartitem.cpp5
-rw-r--r--src/charts/chartitem_p.h2
-rw-r--r--src/charts/chartpresenter.cpp2
-rw-r--r--src/charts/piechart/piechartitem.cpp27
-rw-r--r--src/charts/piechart/piechartitem_p.h2
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);