summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/kernel/qvariant.cpp7
-rw-r--r--tests/auto/gui/kernel/qguivariant/test/data/qpolygonf.binbin0 -> 103 bytes
-rw-r--r--tests/auto/gui/kernel/qguivariant/test/qguivariant.qrc5
-rw-r--r--tests/auto/gui/kernel/qguivariant/test/test.pro1
-rw-r--r--tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp42
5 files changed, 54 insertions, 1 deletions
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index 20e13a050f..5754af42ac 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -1892,6 +1892,7 @@ void QVariant::load(QDataStream &s)
void QVariant::save(QDataStream &s) const
{
quint32 typeId = type();
+ bool fakeUserType = false;
if (s.version() < QDataStream::Qt_4_0) {
int i;
for (i = 0; i <= MapFromThreeCount - 1; ++i) {
@@ -1916,12 +1917,16 @@ void QVariant::save(QDataStream &s) const
} else if (typeId >= QMetaType::QKeySequence && typeId <= QMetaType::QQuaternion) {
// and as a result these types received lower ids too
typeId +=1;
+ } else if (typeId == QMetaType::QPolygonF) {
+ // This existed in Qt 4 only as a custom type
+ typeId = 127;
+ fakeUserType = true;
}
}
s << typeId;
if (s.version() >= QDataStream::Qt_4_2)
s << qint8(d.is_null);
- if (d.type >= QVariant::UserType) {
+ if (d.type >= QVariant::UserType || fakeUserType) {
s << QMetaType::typeName(userType());
}
diff --git a/tests/auto/gui/kernel/qguivariant/test/data/qpolygonf.bin b/tests/auto/gui/kernel/qguivariant/test/data/qpolygonf.bin
new file mode 100644
index 0000000000..02e749b83f
--- /dev/null
+++ b/tests/auto/gui/kernel/qguivariant/test/data/qpolygonf.bin
Binary files differ
diff --git a/tests/auto/gui/kernel/qguivariant/test/qguivariant.qrc b/tests/auto/gui/kernel/qguivariant/test/qguivariant.qrc
new file mode 100644
index 0000000000..576d9cda1c
--- /dev/null
+++ b/tests/auto/gui/kernel/qguivariant/test/qguivariant.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>data</file>
+</qresource>
+</RCC>
diff --git a/tests/auto/gui/kernel/qguivariant/test/test.pro b/tests/auto/gui/kernel/qguivariant/test/test.pro
index d47cf7bf6f..e3b4a350ca 100644
--- a/tests/auto/gui/kernel/qguivariant/test/test.pro
+++ b/tests/auto/gui/kernel/qguivariant/test/test.pro
@@ -4,3 +4,4 @@ TARGET = tst_qguivariant
SOURCES += tst_qguivariant.cpp
INCLUDEPATH += $$PWD/../../../../other/qvariant_common
QT += testlib
+RESOURCES += qguivariant.qrc
diff --git a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp
index 6fdf3dc843..8a68f40f3f 100644
--- a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp
+++ b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp
@@ -114,6 +114,7 @@ private slots:
void writeToReadFromDataStream_data();
void writeToReadFromDataStream();
+ void writeToReadFromOldDataStream();
void colorInteger();
void invalidQColor();
@@ -525,6 +526,7 @@ void tst_QGuiVariant::writeToReadFromDataStream_data()
QTest::newRow( "pointarray_valid" ) << QVariant::fromValue( QPolygon( QRect( 10, 10, 20, 20 ) ) ) << false;
QTest::newRow( "region_invalid" ) << QVariant::fromValue( QRegion() ) << true;
QTest::newRow( "region_valid" ) << QVariant::fromValue( QRegion( 10, 10, 20, 20 ) ) << false;
+ QTest::newRow("polygonf_valid") << QVariant::fromValue(QPolygonF(QRectF(10, 10, 20, 20))) << false;
}
void tst_QGuiVariant::invalidQColor()
@@ -609,6 +611,46 @@ void tst_QGuiVariant::writeToReadFromDataStream()
}
}
+void tst_QGuiVariant::writeToReadFromOldDataStream()
+{
+ QPolygonF polyF(QRectF(10, 10, 50, 50));
+ QVariant testVariant(polyF);
+ {
+ // Read into a variant and compare
+ QFile file(":/data/qpolygonf.bin");
+ QVERIFY(file.open(QIODevice::ReadOnly));
+ QDataStream dataFileStream(&file);
+ dataFileStream.setVersion(QDataStream::Qt_4_9);
+ QVariant readVariant;
+ dataFileStream >> readVariant;
+ QVERIFY(readVariant.type() == QMetaType::QPolygonF);
+ QCOMPARE(testVariant, readVariant);
+ file.close();
+ }
+ {
+ QByteArray variantData;
+ {
+ QDataStream varDataStream(&variantData, QIODevice::WriteOnly);
+ varDataStream << testVariant;
+ }
+ // Read into a bytearray and compare
+ QFile file(":/data/qpolygonf.bin");
+ QVERIFY(file.open(QIODevice::ReadOnly));
+ QDataStream dataFileStream(&file);
+ dataFileStream.setVersion(QDataStream::Qt_4_9);
+ int dummy;
+ dataFileStream >> dummy;
+ QByteArray polyData49;
+ dataFileStream >> polyData49;
+ file.close();
+ QByteArray polyData50;
+ QDataStream readVarData(variantData);
+ readVarData >> dummy;
+ readVarData >> polyData50;
+ QVERIFY(polyData49 == polyData50);
+ }
+}
+
void tst_QGuiVariant::debugStream_data()
{
QTest::addColumn<QVariant>("variant");