summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/kernel/qvariant.cpp8
-rw-r--r--src/corelib/kernel/qvariant.h20
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp21
3 files changed, 33 insertions, 16 deletions
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index c3ccc74a20..ec90c4ceef 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -3508,6 +3508,10 @@ QDebug operator<<(QDebug dbg, const QVariant::Type p)
Creates a copy of \a other.
*/
+/*! \fn QSequentialIterable::const_iterator::const_iterator& QSequentialIterable::const_iterator::operator=(const const_iterator &other)
+ Assigns \a other to this.
+*/
+
/*! \fn QVariant QSequentialIterable::const_iterator::operator*() const
Returns the current item, converted to a QVariant.
@@ -3684,6 +3688,10 @@ QDebug operator<<(QDebug dbg, const QVariant::Type p)
Creates a copy of \a other.
*/
+/*! \fn QAssociativeIterable::const_iterator::const_iterator& QAssociativeIterable::const_iterator::operator=(const const_iterator &other)
+ Assigns \a other to this.
+*/
+
/*! \fn QVariant QAssociativeIterable::const_iterator::operator*() const
Returns the current value, converted to a QVariant.
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h
index 1f35850043..b6d5c1aebd 100644
--- a/src/corelib/kernel/qvariant.h
+++ b/src/corelib/kernel/qvariant.h
@@ -602,6 +602,16 @@ public:
ref->ref();
}
+ inline const_iterator& operator=(const const_iterator &other)
+ {
+ if (!m_impl.equal(other.m_impl)) {
+ m_impl = other.m_impl;
+ ref = other.ref;
+ }
+ ref->ref();
+ return *this;
+ }
+
inline const QVariant operator*() const {
const QtMetaTypePrivate::VariantData d = m_impl.getCurrent();
if (d.metaTypeId == qMetaTypeId<QVariant>())
@@ -671,6 +681,16 @@ public:
ref->ref();
}
+ inline const_iterator& operator=(const const_iterator &other)
+ {
+ if (!m_impl.equal(other.m_impl)) {
+ m_impl = other.m_impl;
+ ref = other.ref;
+ }
+ ref->ref();
+ return *this;
+ }
+
inline const QVariant key() const {
const QtMetaTypePrivate::VariantData d = m_impl.getCurrentKey();
QVariant v(d.metaTypeId, d.data, d.flags);
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index a375ac1797..6366c47601 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -3830,13 +3830,8 @@ void tst_QVariant::iterateContainerElements()
for ( ; it != end; ++it, ++i) {
QCOMPARE(ints.at(i), *it);
}
- }
- {
- QVariantList ints;
- ints << 1 << 2 << 3;
- QVariant var = QVariant::fromValue(ints);
- QSequentialIterable iter = var.value<QSequentialIterable>();
- QSequentialIterable::const_iterator it = iter.begin();
+
+ it = iter.begin();
QVariantList intsCopy;
intsCopy << *(it++);
@@ -3894,17 +3889,11 @@ void tst_QVariant::iterateContainerElements()
for ( ; it != end; ++it, ++i) {
QCOMPARE(*(mapping.begin() + i), (*it).toString());
}
- }
- {
+
QVariantList nums;
nums << "one" << "two" << "three";
- QMap<int, QString> mapping;
- mapping.insert(1, "one");
- mapping.insert(2, "two");
- mapping.insert(3, "three");
- QVariant var = QVariant::fromValue(mapping);
- QAssociativeIterable iter = var.value<QAssociativeIterable>();
- QAssociativeIterable::const_iterator it = iter.begin();
+
+ it = iter.begin();
QVariantList numsCopy;
numsCopy << *(it++);