diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-07-11 14:51:40 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-07-11 17:24:39 +0200 |
commit | 13374ceb165c44658aa97890c37b206859c9a31c (patch) | |
tree | 562362b196a459ee3449a5a1e60e5216a9dd6984 /src/quick/items/qquickrectangle.cpp | |
parent | ae47deba4c943c496412530a8d2a5a688ae12038 (diff) | |
parent | b5d18be5a03406d0aac83856dd41e1525fd14a28 (diff) |
Merge remote-tracking branch 'origin/wip/qt6' into wip/cmake
Change-Id: I2963c1209316fb6755f572969f368970450d7991
Diffstat (limited to 'src/quick/items/qquickrectangle.cpp')
-rw-r--r-- | src/quick/items/qquickrectangle.cpp | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/quick/items/qquickrectangle.cpp b/src/quick/items/qquickrectangle.cpp index 5e217dcd0c..f3cefc7463 100644 --- a/src/quick/items/qquickrectangle.cpp +++ b/src/quick/items/qquickrectangle.cpp @@ -451,8 +451,30 @@ void QQuickRectangle::setGradient(const QJSValue &gradient) d->gradient = QJSValue(); } } else if (gradient.isNumber() || gradient.isString()) { - QGradient preset(gradient.toVariant().value<QGradient::Preset>()); - if (preset.type() != QGradient::NoGradient) { + static const QMetaEnum gradientPresetMetaEnum = QMetaEnum::fromType<QGradient::Preset>(); + Q_ASSERT(gradientPresetMetaEnum.isValid()); + + QGradient result; + + // This code could simply use gradient.toVariant().convert<QGradient::Preset>(), + // but QTBUG-76377 prevents us from doing error checks. So we need to + // do them manually. Also, NumPresets cannot be used. + + if (gradient.isNumber()) { + const auto preset = QGradient::Preset(gradient.toInt()); + if (preset != QGradient::NumPresets && gradientPresetMetaEnum.valueToKey(preset)) + result = QGradient(preset); + } else if (gradient.isString()) { + const auto presetName = gradient.toString(); + if (presetName != QLatin1String("NumPresets")) { + bool ok; + const auto presetInt = gradientPresetMetaEnum.keyToValue(qPrintable(presetName), &ok); + if (ok) + result = QGradient(QGradient::Preset(presetInt)); + } + } + + if (result.type() != QGradient::NoGradient) { d->gradient = gradient; } else { qmlWarning(this) << "No such gradient preset '" << gradient.toString() << "'"; |