summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2025-12-12 08:21:47 +0100
committerUlf Hermann <ulf.hermann@qt.io>2025-12-15 21:33:47 +0100
commit3f688aba227c93502ee3add4edea9c20ff62fa06 (patch)
tree419ba6005428360ca3bad76d998b0c5294fc959b
parentb88f55e3a30d519ccf7b78feace284bb0a083628 (diff)
Core: Add replacement for QMetaSequence::Iterable::set()
setAt() is a better name. Amends commit 9adaf8505a9eb9d7acb7fee6aeac5341aa24a074. This was found in API review. Pick-to: 6.11 Change-Id: I4560273961a39e8d60be3c7e7a51cf81e2a8c85e Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
-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();