summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/kernel/qvariant.cpp2
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp13
2 files changed, 13 insertions, 2 deletions
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index f28cd5a7a0..31c2173072 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -2032,10 +2032,10 @@ bool QVariant::convert(QMetaType targetType)
QVariant oldValue = *this;
clear();
+ create(targetType.id(), nullptr);
if (!oldValue.canConvert(targetType))
return false;
- create(targetType.id(), nullptr);
// Fail if the value is not initialized or was forced null by a previous failed convert.
if (oldValue.d.is_null && oldValue.d.typeId() != QMetaType::Nullptr)
return false;
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index 0eefd95ac7..ea8f26ae20 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -99,6 +99,7 @@ private slots:
void canConvert_data();
void canConvert();
+ void convert();
void toSize_data();
void toSize();
@@ -555,6 +556,16 @@ void tst_QVariant::canConvert()
QCOMPARE(val.canConvert(23876), false);
}
+void tst_QVariant::convert()
+{
+ // verify that after convert(), the variant's type has been changed
+ QVariant var = QVariant::fromValue(QString("A string"));
+ var.convert(QMetaType::fromType<int>());
+ QCOMPARE(var.metaType(), QMetaType::fromType<int>());
+ QCOMPARE(var.toInt(), 0);
+}
+
+
void tst_QVariant::toInt_data()
{
QTest::addColumn<QVariant>("value");
@@ -2343,8 +2354,8 @@ void tst_QVariant::qvariant_cast_QObject()
QVERIFY(!data.canConvert(QMetaType::QObjectStar));
QVERIFY(!data.canConvert(::qMetaTypeId<QObject*>()));
QVERIFY(!data.value<QObject*>());
- QVERIFY(!data.convert(QMetaType::QObjectStar));
QVERIFY(data.userType() != QMetaType::QObjectStar);
+ QVERIFY(!data.convert(QMetaType::QObjectStar));
}
}