summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/kernel/qmetacontainer.h1
-rw-r--r--src/corelib/kernel/qmetasequence.cpp5
-rw-r--r--src/corelib/kernel/qmetasequence.h14
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();