QVariant: ensure the type custom is registered on construction
I must have broken this in the 6.5 work I did for QMetaType and QVariant, but I haven't searched which commit exactly did it. Our QVariant tests are old and thus only checked the type ID, which meant that they caused the registration by the act of asking for the ID in the first place; this commit adds a couple of explicit checks for the type registered by name before the ID. Fixes: QTBUG-112205 Pick-to: 6.5 6.5.0 Change-Id: Idd5e1bb52be047d7b4fffffd174f1b14d90fd7a3 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>bb10
parent
4d90c4e74a
commit
8570e86fff
|
|
@ -806,6 +806,7 @@ QVariant::QVariant(const QVariant &p)
|
|||
*/
|
||||
QVariant::QVariant(QMetaType type, const void *copy) : d(type.iface())
|
||||
{
|
||||
type.registerType();
|
||||
if (isValidMetaTypeForVariant(type.iface(), copy))
|
||||
customConstruct(type.iface(), &d, copy);
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1995,6 +1995,8 @@ void tst_QVariant::userType()
|
|||
QVariant userVar;
|
||||
userVar.setValue(data);
|
||||
|
||||
QVERIFY(QMetaType::fromName("MyType").isValid());
|
||||
QCOMPARE(QMetaType::fromName("MyType"), QMetaType::fromType<MyType>());
|
||||
QVERIFY(userVar.typeId() > QMetaType::User);
|
||||
QCOMPARE(userVar.userType(), qMetaTypeId<MyType>());
|
||||
QCOMPARE(userVar.typeName(), "MyType");
|
||||
|
|
@ -2118,7 +2120,15 @@ void tst_QVariant::podUserType()
|
|||
pod.a = 10;
|
||||
pod.b = 20;
|
||||
|
||||
// one of these two must register the type
|
||||
// (QVariant::fromValue calls QMetaType::fromType)
|
||||
QVariant pod_as_variant = QVariant::fromValue(pod);
|
||||
QMetaType mt = QMetaType::fromType<MyTypePOD>();
|
||||
QCOMPARE(pod_as_variant.metaType(), mt);
|
||||
QCOMPARE(pod_as_variant.metaType().name(), mt.name());
|
||||
QCOMPARE(QMetaType::fromName(mt.name()), mt);
|
||||
QCOMPARE_NE(pod_as_variant.typeId(), 0);
|
||||
|
||||
MyTypePOD pod2 = qvariant_cast<MyTypePOD>(pod_as_variant);
|
||||
|
||||
QCOMPARE(pod.a, pod2.a);
|
||||
|
|
|
|||
Loading…
Reference in New Issue