diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/kernel/qassociativeiterable.cpp | 14 |
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; } |