diff --git a/src/piechart/qpieseries.cpp b/src/piechart/qpieseries.cpp index 49701ba..9f7dd96 100644 --- a/src/piechart/qpieseries.cpp +++ b/src/piechart/qpieseries.cpp @@ -269,6 +269,8 @@ bool QPieSeries::append(QList slices) foreach (QPieSlice* s, slices) { if (!s || d->m_slices.contains(s)) return false; + if (s->series()) // already added to some series + return false; } foreach (QPieSlice* s, slices) { @@ -329,6 +331,9 @@ bool QPieSeries::insert(int index, QPieSlice* slice) if (!slice || d->m_slices.contains(slice)) return false; + if (slice->series()) // already added to some series + return false; + slice->setParent(this); QPieSlicePrivate::fromSlice(slice)->m_series = this; d->m_slices.insert(index, slice); diff --git a/tests/auto/qpieseries/tst_qpieseries.cpp b/tests/auto/qpieseries/tst_qpieseries.cpp index d215ea9..8fa8f14 100644 --- a/tests/auto/qpieseries/tst_qpieseries.cpp +++ b/tests/auto/qpieseries/tst_qpieseries.cpp @@ -171,6 +171,10 @@ void tst_qpieseries::append() QCOMPARE(added.count(), 1); QCOMPARE(added.first(), slice1); + // try to append same slice to another series + QPieSeries series2; + QVERIFY(!series2.append(slice1)); + // append pointer list QList list; QVERIFY(!m_series->append(list)); @@ -240,6 +244,10 @@ void tst_qpieseries::insert() QCOMPARE(added.count(), 1); QCOMPARE(added.first(), slice1); + // try to insert same slice to another series + QPieSeries series2; + QVERIFY(!series2.insert(0, slice1)); + // add some more slices QPieSlice *slice2 = m_series->append("slice 2", 2); QPieSlice *slice4 = m_series->append("slice 4", 4);