diff options
| author | Ulf Hermann <ulf.hermann@qt.io> | 2025-12-12 08:21:47 +0100 |
|---|---|---|
| committer | Ulf Hermann <ulf.hermann@qt.io> | 2025-12-15 21:33:47 +0100 |
| commit | 3f688aba227c93502ee3add4edea9c20ff62fa06 (patch) | |
| tree | 419ba6005428360ca3bad76d998b0c5294fc959b | |
| parent | b88f55e3a30d519ccf7b78feace284bb0a083628 (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.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(); |
