From f6f67dde64089e246ed1f396cbc14ff9e1086736 2012-05-31 09:55:29 From: Jani Honkonen Date: 2012-05-31 09:55:29 Subject: [PATCH] Implemented QAbstractSeries::chart() Now you can actuallu use it :) Also implemented some auto tests about it and added some more checks for add/remove series. --- diff --git a/src/chartdataset.cpp b/src/chartdataset.cpp index 24e25b4..c46b053 100644 --- a/src/chartdataset.cpp +++ b/src/chartdataset.cpp @@ -19,6 +19,7 @@ ****************************************************************************/ #include "chartdataset_p.h" +#include "qchart.h" #include "qaxis.h" #include "qaxis_p.h" #include "qabstractseries_p.h" @@ -29,7 +30,7 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE -ChartDataSet::ChartDataSet(QObject *parent):QObject(parent), +ChartDataSet::ChartDataSet(QChart *parent):QObject(parent), m_axisX(new QAxis(this)), m_axisY(new QAxis(this)), m_domainIndex(0), @@ -116,7 +117,8 @@ void ChartDataSet::addSeries(QAbstractSeries* series, QAxis *axisY) m_indexSeriesMap.insert(key,series); - series->d_ptr->m_dataset=this; + series->d_ptr->m_chart = qobject_cast(parent()); + series->d_ptr->m_dataset = this; emit seriesAdded(series,domain); @@ -138,8 +140,10 @@ QAxis* ChartDataSet::removeSeries(QAbstractSeries* series) Q_ASSERT(key!=-1); m_indexSeriesMap.remove(key); + series->setParent(0); - series->d_ptr->m_dataset=0; + series->d_ptr->m_chart = 0; + series->d_ptr->m_dataset = 0; QList axes = m_seriesAxisMap.values(); diff --git a/src/chartdataset_p.h b/src/chartdataset_p.h index 1f44738..42095fa 100644 --- a/src/chartdataset_p.h +++ b/src/chartdataset_p.h @@ -43,7 +43,7 @@ class QTCOMMERCIALCHART_AUTOTEST_EXPORT ChartDataSet : public QObject { Q_OBJECT public: - ChartDataSet(QObject* parent=0); + ChartDataSet(QChart* parent=0); virtual ~ChartDataSet(); void addSeries(QAbstractSeries* series,QAxis *axisY = 0); diff --git a/src/qabstractseries.cpp b/src/qabstractseries.cpp index 3dc2ade..3468e2b 100644 --- a/src/qabstractseries.cpp +++ b/src/qabstractseries.cpp @@ -110,10 +110,22 @@ QString QAbstractSeries::name() const return d_ptr->m_name; } +/*! + \brief Returns the chart where series belongs to. + + Set automatically when the series is added to the chart + and unset when the series is removed from the chart. +*/ +QChart* QAbstractSeries::chart() const +{ + return d_ptr->m_chart; +} + /////////////////////////////////////////////////////////////////////////////////////////////////// QAbstractSeriesPrivate::QAbstractSeriesPrivate(QAbstractSeries* q): q_ptr(q), + m_chart(0), m_dataset(0) { } diff --git a/src/qabstractseries_p.h b/src/qabstractseries_p.h index 59544c4..1296e71 100644 --- a/src/qabstractseries_p.h +++ b/src/qabstractseries_p.h @@ -54,6 +54,7 @@ public: protected: QAbstractSeries *q_ptr; + QChart *m_chart; ChartDataSet *m_dataset; QString m_name; diff --git a/tests/auto/qchart/tst_qchart.cpp b/tests/auto/qchart/tst_qchart.cpp index 7c98ba1..fb69925 100644 --- a/tests/auto/qchart/tst_qchart.cpp +++ b/tests/auto/qchart/tst_qchart.cpp @@ -203,10 +203,12 @@ void tst_QChart::addSeries() m_view->show(); QTest::qWaitForWindowShown(m_view); if(!axis) axis = m_chart->axisY(); + QVERIFY(!series->chart()); m_chart->addSeries(series,axis); + QVERIFY(series->chart() == m_chart); QCOMPARE(m_chart->axisY(series),axis); m_chart->removeSeries(series); - + QVERIFY(!series->chart()); } void tst_QChart::animationOptions_data() @@ -362,6 +364,9 @@ void tst_QChart::removeAllSeries() QLineSeries* series0 = new QLineSeries(this); QLineSeries* series1 = new QLineSeries(this); QLineSeries* series2 = new QLineSeries(this); + QSignalSpy deleteSpy1(series0, SIGNAL(destroyed())); + QSignalSpy deleteSpy2(series1, SIGNAL(destroyed())); + QSignalSpy deleteSpy3(series2, SIGNAL(destroyed())); m_chart->addSeries(series0); m_chart->addSeries(series1); @@ -374,10 +379,12 @@ void tst_QChart::removeAllSeries() QVERIFY(m_chart->axisY(series2)!=0); m_chart->removeAllSeries(); - QVERIFY(m_chart->axisY(series0)==0); QVERIFY(m_chart->axisY(series1)==0); QVERIFY(m_chart->axisY(series2)==0); + QCOMPARE(deleteSpy1.count(), 1); + QCOMPARE(deleteSpy2.count(), 1); + QCOMPARE(deleteSpy3.count(), 1); } void tst_QChart::removeSeries_data() @@ -389,6 +396,7 @@ void tst_QChart::removeSeries() { QFETCH(QAbstractSeries *, series); QFETCH(QAxis *, axis); + QSignalSpy deleteSpy(series, SIGNAL(destroyed())); m_view->show(); QTest::qWaitForWindowShown(m_view); if(!axis) axis = m_chart->axisY(); @@ -396,6 +404,7 @@ void tst_QChart::removeSeries() QCOMPARE(m_chart->axisY(series),axis); m_chart->removeSeries(series); QVERIFY(m_chart->axisY(series)==0); + QCOMPARE(deleteSpy.count(), 0); } void tst_QChart::scrollDown_data()