diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index a6b92f9f8f..b79716ff4c 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -470,6 +470,9 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok) case QVariant::Uuid: *str = v_cast(d)->toString(); break; + case QMetaType::Nullptr: + *str = QString(); + break; default: #ifndef QT_NO_QOBJECT { @@ -652,6 +655,9 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok) case QVariant::Uuid: *ba = v_cast(d)->toByteArray(); break; + case QMetaType::Nullptr: + *ba = QByteArray(); + break; default: #ifndef QT_NO_QOBJECT { @@ -3278,11 +3284,11 @@ bool QVariant::canConvert(int targetTypeId) const case QVariant::Bitmap: return currentType == QVariant::Pixmap || currentType == QVariant::Image; case QVariant::ByteArray: - return currentType == QVariant::Color + return currentType == QVariant::Color || currentType == QMetaType::Nullptr || ((QMetaType::typeFlags(currentType) & QMetaType::IsEnumeration) && QMetaType::metaObjectForType(currentType)); case QVariant::String: return currentType == QVariant::KeySequence || currentType == QVariant::Font - || currentType == QVariant::Color + || currentType == QVariant::Color || currentType == QMetaType::Nullptr || ((QMetaType::typeFlags(currentType) & QMetaType::IsEnumeration) && QMetaType::metaObjectForType(currentType)); case QVariant::KeySequence: return currentType == QVariant::String || currentType == QVariant::Int; diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index a5973276f2..0d45159d09 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -1062,6 +1062,7 @@ void tst_QVariant::toByteArray_data() QTest::newRow( "longlong" ) << QVariant( (qlonglong)34 ) << QByteArray( "34" ); QTest::newRow( "ulonglong" ) << QVariant( (qulonglong)34 ) << QByteArray( "34" ); + QTest::newRow( "nullptr" ) << QVariant::fromValue(nullptr) << QByteArray(); } void tst_QVariant::toByteArray() @@ -1071,7 +1072,13 @@ void tst_QVariant::toByteArray() QVERIFY( value.isValid() ); QVERIFY( value.canConvert( QVariant::ByteArray ) ); QByteArray ba = value.toByteArray(); + QCOMPARE( ba.isNull(), result.isNull() ); QCOMPARE( ba, result ); + + QVERIFY( value.convert( QVariant::ByteArray ) ); + QCOMPARE( value.isNull(), result.isNull() ); + QCOMPARE( value.toByteArray().isNull(), result.isNull() ); + QCOMPARE( value.toByteArray(), result ); } void tst_QVariant::toString_data() @@ -1098,6 +1105,7 @@ void tst_QVariant::toString_data() QString( "123456789012" ); QTest::newRow("QJsonValue") << QVariant(QJsonValue(QString("hello"))) << QString("hello"); QTest::newRow("QJsonValue(Null)") << QVariant(QJsonValue(QJsonValue::Null)) << QString(); + QTest::newRow("nullptr") << QVariant::fromValue(nullptr) << QString(); } void tst_QVariant::toString() @@ -1107,7 +1115,13 @@ void tst_QVariant::toString() QVERIFY( value.isValid() ); QVERIFY( value.canConvert( QVariant::String ) ); QString str = value.toString(); + QCOMPARE( str.isNull(), result.isNull() ); QCOMPARE( str, result ); + + QVERIFY( value.convert( QVariant::String ) ); + QCOMPARE( value.isNull(), result.isNull() ); + QCOMPARE( value.toString().isNull(), result.isNull() ); + QCOMPARE( value.toString(), result ); } void tst_QVariant::toDate_data()