diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index ba36b0790d..ae0c495dcf 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -2387,8 +2387,12 @@ QDataStream &operator<<(QDataStream &s, const QFont &font) s << (quint8)font.d->request.hintingPreference; if (s.version() >= QDataStream::Qt_5_6) s << (quint8)font.d->capital; - if (s.version() >= QDataStream::Qt_5_13) - s << font.d->request.families; + if (s.version() >= QDataStream::Qt_5_13) { + if (s.version() < QDataStream::Qt_6_0) + s << font.d->request.families.mid(1); + else + s << font.d->request.families; + } return s; } @@ -2498,7 +2502,10 @@ QDataStream &operator>>(QDataStream &s, QFont &font) if (s.version() >= QDataStream::Qt_5_13) { QStringList value; s >> value; - font.d->request.families = value; + if (s.version() < QDataStream::Qt_6_0) + font.d->request.families.append(value); + else + font.d->request.families = value; } return s; } diff --git a/tests/auto/gui/text/qfont/CMakeLists.txt b/tests/auto/gui/text/qfont/CMakeLists.txt index 05c6ca8270..6e0583bc30 100644 --- a/tests/auto/gui/text/qfont/CMakeLists.txt +++ b/tests/auto/gui/text/qfont/CMakeLists.txt @@ -16,6 +16,7 @@ qt_internal_add_test(tst_qfont # Resources: set(testfont_resource_files + "datastream.515" "weirdfont.otf" ) diff --git a/tests/auto/gui/text/qfont/datastream.515 b/tests/auto/gui/text/qfont/datastream.515 new file mode 100644 index 0000000000..acd99e7e9b Binary files /dev/null and b/tests/auto/gui/text/qfont/datastream.515 differ diff --git a/tests/auto/gui/text/qfont/testfont.qrc b/tests/auto/gui/text/qfont/testfont.qrc index cf51e4a2b4..7a7b66f984 100644 --- a/tests/auto/gui/text/qfont/testfont.qrc +++ b/tests/auto/gui/text/qfont/testfont.qrc @@ -1,5 +1,6 @@ weirdfont.otf + datastream.515 diff --git a/tests/auto/gui/text/qfont/tst_qfont.cpp b/tests/auto/gui/text/qfont/tst_qfont.cpp index 6bae45e5c3..e0ece40bdf 100644 --- a/tests/auto/gui/text/qfont/tst_qfont.cpp +++ b/tests/auto/gui/text/qfont/tst_qfont.cpp @@ -62,6 +62,7 @@ private slots: void insertAndRemoveSubstitutions(); void serialize_data(); void serialize(); + void deserializeQt515(); void styleName(); void defaultFamily_data(); @@ -511,6 +512,43 @@ void tst_QFont::serialize() } } +void tst_QFont::deserializeQt515() +{ + QFile file; + file.setFileName(QFINDTESTDATA("datastream.515")); + QVERIFY(file.open(QIODevice::ReadOnly)); + + QFont font; + { + QDataStream stream(&file); + stream.setVersion(QDataStream::Qt_5_15); + stream >> font; + } + + QCOMPARE(font.family(), QStringLiteral("FirstFamily")); + QCOMPARE(font.families().size(), 3); + QCOMPARE(font.families().at(0), QStringLiteral("FirstFamily")); + QCOMPARE(font.families().at(1), QStringLiteral("OtherFamily1")); + QCOMPARE(font.families().at(2), QStringLiteral("OtherFamily2")); + QCOMPARE(font.pointSize(), 12); + + QVERIFY(file.reset()); + QByteArray fileContent = file.readAll(); + QByteArray serializedContent; + { + QBuffer buffer(&serializedContent); + QVERIFY(buffer.open(QIODevice::WriteOnly)); + + QDataStream stream(&buffer); + stream.setVersion(QDataStream::Qt_5_15); + stream << font; + } + + QCOMPARE(serializedContent, fileContent); + + file.close(); +} + void tst_QFont::styleName() { #if !defined(Q_OS_MAC)