summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qassociativeiterable.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/corelib/kernel/qassociativeiterable.cpp b/src/corelib/kernel/qassociativeiterable.cpp
index 41db3485f0..7b4c103c63 100644
--- a/src/corelib/kernel/qassociativeiterable.cpp
+++ b/src/corelib/kernel/qassociativeiterable.cpp
@@ -264,9 +264,19 @@ void QAssociativeIterable::removeKey(const QVariant &key)
QVariant QAssociativeIterable::value(const QVariant &key) const
{
const QMetaAssociation meta = metaContainer();
+ const QMetaType mappedMetaType = meta.mappedMetaType();
+
QtPrivate::QVariantTypeCoercer coercer;
- QVariant result(QMetaType(meta.mappedMetaType()));
- meta.mappedAtKey(constIterable(), coercer.coerce(key, meta.keyMetaType()), result.data());
+ const void *keyData = coercer.coerce(key, meta.keyMetaType());
+
+ if (mappedMetaType == QMetaType::fromType<QVariant>()) {
+ QVariant result;
+ meta.mappedAtKey(constIterable(), keyData, &result);
+ return result;
+ }
+
+ QVariant result(mappedMetaType);
+ meta.mappedAtKey(constIterable(), keyData, result.data());
return result;
}