Fix conversion QVariant(QColor) to QString.
QVariant was using QColor::name() to convert a color to string, which by default loses alpha value. The patch is fixing the problem by always including the alpha value in the string when required. [ChangeLog][Core][Variant] QVariant(QColor)::toString() uses QColor::HexArgb format when the alpha component is different from 1. Task-number: QTBUG-37851 Change-Id: I887460c1ea151180ba99d64dd873ba9d6e2268f2 Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>bb10
parent
10379e48f1
commit
2e00500b9f
|
|
@ -175,7 +175,8 @@ static bool convert(const QVariant::Private *d, int t,
|
|||
switch (t) {
|
||||
case QVariant::ByteArray:
|
||||
if (d->type == QVariant::Color) {
|
||||
*static_cast<QByteArray *>(result) = v_cast<QColor>(d)->name().toLatin1();
|
||||
const QColor *c = v_cast<QColor>(d);
|
||||
*static_cast<QByteArray *>(result) = c->name(c->alpha() != 255 ? QColor::HexArgb : QColor::HexRgb).toLatin1();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
|
@ -190,9 +191,11 @@ static bool convert(const QVariant::Private *d, int t,
|
|||
case QVariant::Font:
|
||||
*str = v_cast<QFont>(d)->toString();
|
||||
return true;
|
||||
case QVariant::Color:
|
||||
*str = v_cast<QColor>(d)->name();
|
||||
case QVariant::Color: {
|
||||
const QColor *c = v_cast<QColor>(d);
|
||||
*str = c->name(c->alpha() != 255 ? QColor::HexArgb : QColor::HexRgb);
|
||||
return true;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -250,6 +250,14 @@ void tst_QGuiVariant::toColor_data()
|
|||
QColor c("red");
|
||||
QTest::newRow( "string" ) << QVariant( QString( "red" ) ) << c;
|
||||
QTest::newRow( "solid brush" ) << QVariant( QBrush(c) ) << c;
|
||||
QTest::newRow("qbytearray") << QVariant(QByteArray("red")) << c;
|
||||
QTest::newRow("same color") << QVariant(c) << c;
|
||||
QTest::newRow("qstring(#ff0000)") << QVariant(QString::fromUtf8("#ff0000")) << c;
|
||||
QTest::newRow("qbytearray(#ff0000)") << QVariant(QByteArray("#ff0000")) << c;
|
||||
|
||||
c.setNamedColor("#88112233");
|
||||
QTest::newRow("qstring(#88112233)") << QVariant(QString::fromUtf8("#88112233")) << c;
|
||||
QTest::newRow("qbytearray(#88112233)") << QVariant(QByteArray("#88112233")) << c;
|
||||
}
|
||||
|
||||
void tst_QGuiVariant::toColor()
|
||||
|
|
@ -260,6 +268,8 @@ void tst_QGuiVariant::toColor()
|
|||
QVERIFY( value.canConvert( QVariant::Color ) );
|
||||
QColor d = qvariant_cast<QColor>(value);
|
||||
QCOMPARE( d, result );
|
||||
QVERIFY(value.convert(QMetaType::QColor));
|
||||
QCOMPARE(d, QColor(value.toString()));
|
||||
}
|
||||
|
||||
void tst_QGuiVariant::toPixmap_data()
|
||||
|
|
|
|||
Loading…
Reference in New Issue