diff options
| -rw-r--r-- | src/corelib/kernel/qmetacontainer.h | 1 | ||||
| -rw-r--r-- | src/corelib/kernel/qmetasequence.cpp | 5 | ||||
| -rw-r--r-- | src/corelib/kernel/qmetasequence.h | 14 |
3 files changed, 17 insertions, 3 deletions
diff --git a/src/corelib/kernel/qmetacontainer.h b/src/corelib/kernel/qmetacontainer.h index c9d3a6bf9c6..bff5af11914 100644 --- a/src/corelib/kernel/qmetacontainer.h +++ b/src/corelib/kernel/qmetacontainer.h @@ -972,6 +972,7 @@ public: QVariant at(qsizetype idx) const; void set(qsizetype idx, const QVariant &value); + void setAt(qsizetype idx, const QVariant &value); void append(const QVariant &value); void prepend(const QVariant &value); void removeLast(); diff --git a/src/corelib/kernel/qmetasequence.cpp b/src/corelib/kernel/qmetasequence.cpp index 2a3a923d5ca..91ac59d6177 100644 --- a/src/corelib/kernel/qmetasequence.cpp +++ b/src/corelib/kernel/qmetasequence.cpp @@ -584,6 +584,11 @@ void QMetaSequence::valueAtConstIterator(const void *iterator, void *result) con */ /*! + \fn void QMetaSequence::Iterable::setAt(qsizetype idx, const QVariant &value) + Sets the element at position \a idx in the container to \a value. +*/ + +/*! \class QMetaSequence::Iterable::ConstIterator \inmodule QtCore \inherits QConstIterator diff --git a/src/corelib/kernel/qmetasequence.h b/src/corelib/kernel/qmetasequence.h index 26156e7924f..784a8960868 100644 --- a/src/corelib/kernel/qmetasequence.h +++ b/src/corelib/kernel/qmetasequence.h @@ -199,10 +199,8 @@ public: void set(qsizetype idx, const QVariant &value) { const QMetaSequence meta = metaContainer(); - QtPrivate::QVariantTypeCoercer coercer; - const void *dataPtr = coercer.coerce(value, meta.valueMetaType()); if (meta.canSetValueAtIndex()) { - meta.setValueAtIndex(mutableIterable(), idx, dataPtr); + setAt(idx, value); return; } @@ -210,6 +208,9 @@ public: // We shouldn't second-guess the underlying container QtPrivate::warnSynthesizedAccess( "set() called on an iterable without native indexed accessors. This is slow"); + + QtPrivate::QVariantTypeCoercer coercer; + const void *dataPtr = coercer.coerce(value, meta.valueMetaType()); void *it = meta.begin(m_iterable.mutablePointer()); meta.advanceIterator(it, idx); meta.setValueAtIterator(it, dataPtr); @@ -217,6 +218,13 @@ public: #endif } + void setAt(qsizetype idx, const QVariant &value) + { + const QMetaSequence meta = metaContainer(); + QtPrivate::QVariantTypeCoercer coercer; + meta.setValueAtIndex(mutableIterable(), idx, coercer.coerce(value, meta.valueMetaType())); + } + void append(const QVariant &value) { const QMetaSequence meta = metaContainer(); |
