QAssociativeIterable: Unwrap variants on value()
Fixes: QTBUG-87688 Change-Id: I66515eaa1217c34f003648af6423b318b54977c4 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>bb10
parent
45c248a011
commit
2d0a5f7a01
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4456,6 +4456,20 @@ void tst_QVariant::iterateContainerElements()
|
|||
numsCopy << *(it++);
|
||||
QCOMPARE(nums, numsCopy);
|
||||
}
|
||||
|
||||
{
|
||||
auto container = QVariantMap();
|
||||
|
||||
container["one"] = 1;
|
||||
|
||||
auto containerVariant = QVariant::fromValue(container);
|
||||
auto iter = containerVariant.value<QAssociativeIterable>();
|
||||
auto value = iter.value("one");
|
||||
QCOMPARE(value, QVariant(1));
|
||||
|
||||
auto f = iter.constFind("one");
|
||||
QCOMPARE(*f, QVariant(1));
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QVariant::pairElements()
|
||||
|
|
|
|||
Loading…
Reference in New Issue