summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRyan Chu <ryan.chu@qt.io>2019-05-03 16:14:19 +0200
committerRyan Chu <ryan.chu@qt.io>2019-05-20 22:33:33 +0200
commitcc4c0b43a54d9606f491c193df381a424ae696bf (patch)
tree1dccc4c1ff0555bac0f41108df54c8f2ce56b601
parent14aa1f7d6ffea29647557f98e654355782f55e66 (diff)
QDataStream: Fix inconsistent results of iostream with QPalette objects
The value of NColorRoles got changed since 5.11. It introduced one more role called "PlaceholderText" in the ColorRole enumeration. When using QDataStream (5.12) to read QPalette objects from a file written by 5.9 (<5.11), the processing results are inconsistent. Fixes: QTBUG-74885 Change-Id: I14d57f9603a26e5890b4fd57c7e464c5b38eb3f2 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
-rw-r--r--src/gui/kernel/qpalette.cpp5
-rw-r--r--tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp54
2 files changed, 48 insertions, 11 deletions
diff --git a/src/gui/kernel/qpalette.cpp b/src/gui/kernel/qpalette.cpp
index 9ccfb9b819..c6805dd4e6 100644
--- a/src/gui/kernel/qpalette.cpp
+++ b/src/gui/kernel/qpalette.cpp
@@ -1006,6 +1006,8 @@ QDataStream &operator<<(QDataStream &s, const QPalette &p)
max = QPalette::HighlightedText + 1;
else if (s.version() <= QDataStream::Qt_4_3)
max = QPalette::AlternateBase + 1;
+ else if (s.version() <= QDataStream::Qt_5_11)
+ max = QPalette::ToolTipText + 1;
for (int r = 0; r < max; r++)
s << p.d->br[grp][r];
}
@@ -1046,6 +1048,9 @@ QDataStream &operator>>(QDataStream &s, QPalette &p)
} else if (s.version() <= QDataStream::Qt_4_3) {
p = QPalette();
max = QPalette::AlternateBase + 1;
+ } else if (s.version() <= QDataStream::Qt_5_11) {
+ p = QPalette();
+ max = QPalette::ToolTipText + 1;
}
QBrush tmp;
diff --git a/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp b/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp
index 011a0e1a85..041d9d7a09 100644
--- a/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp
+++ b/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp
@@ -174,6 +174,7 @@ private slots:
void floatingPointPrecision();
+ void compatibility_Qt5();
void compatibility_Qt3();
void compatibility_Qt2();
@@ -260,17 +261,17 @@ static int NColorRoles[] = {
QPalette::HighlightedText + 1, // Qt_4_0, Qt_4_1
QPalette::HighlightedText + 1, // Qt_4_2
QPalette::AlternateBase + 1, // Qt_4_3
- QPalette::PlaceholderText + 1, // Qt_4_4
- QPalette::PlaceholderText + 1, // Qt_4_5
- QPalette::PlaceholderText + 1, // Qt_4_6
- QPalette::PlaceholderText + 1, // Qt_5_0
- QPalette::PlaceholderText + 1, // Qt_5_1
- QPalette::PlaceholderText + 1, // Qt_5_2
- QPalette::PlaceholderText + 1, // Qt_5_3
- QPalette::PlaceholderText + 1, // Qt_5_4
- QPalette::PlaceholderText + 1, // Qt_5_5
- QPalette::PlaceholderText + 1, // Qt_5_6
- 0 // add the correct value for Qt_5_7 here later
+ QPalette::ToolTipText + 1, // Qt_4_4
+ QPalette::ToolTipText + 1, // Qt_4_5
+ QPalette::ToolTipText + 1, // Qt_4_6, Qt_4_7, Qt_4_8, Qt_4_9
+ QPalette::ToolTipText + 1, // Qt_5_0
+ QPalette::ToolTipText + 1, // Qt_5_1
+ QPalette::ToolTipText + 1, // Qt_5_2, Qt_5_3
+ QPalette::ToolTipText + 1, // Qt_5_4, Qt_5_5
+ QPalette::ToolTipText + 1, // Qt_5_6, Qt_5_7, Qt_5_8, Qt_5_9, Qt_5_10, Qt_5_11
+ QPalette::PlaceholderText + 1, // Qt_5_12
+ QPalette::PlaceholderText + 1, // Qt_5_13
+ 0 // add the correct value for Qt_5_14 here later
};
// Testing get/set functions
@@ -3102,6 +3103,37 @@ void tst_QDataStream::streamRealDataTypes()
}
}
+void tst_QDataStream::compatibility_Qt5()
+{
+ QLinearGradient gradient(QPointF(0,0), QPointF(1,1));
+ gradient.setColorAt(0, Qt::red);
+ gradient.setColorAt(1, Qt::blue);
+
+ QBrush brush(gradient);
+ QPalette palette;
+ palette.setBrush(QPalette::Button, brush);
+ palette.setColor(QPalette::Light, Qt::green);
+
+ QByteArray stream;
+ {
+ QDataStream out(&stream, QIODevice::WriteOnly);
+ out.setVersion(QDataStream::Qt_5_7);
+ out << palette;
+ out << brush;
+ }
+ QBrush in_brush;
+ QPalette in_palette;
+ {
+ QDataStream in(stream);
+ in.setVersion(QDataStream::Qt_5_7);
+ in >> in_palette;
+ in >> in_brush;
+ }
+ QCOMPARE(in_brush.style(), Qt::LinearGradientPattern);
+ QCOMPARE(in_palette.brush(QPalette::Button).style(), Qt::LinearGradientPattern);
+ QCOMPARE(in_palette.color(QPalette::Light), QColor(Qt::green));
+}
+
void tst_QDataStream::compatibility_Qt3()
{
QByteArray ba("hello");