diff options
author | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2022-08-29 17:48:27 +0200 |
---|---|---|
committer | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2022-09-02 13:13:34 +0000 |
commit | d076c31bfafcf81dbd44b118a28e4e1e3d004ab5 (patch) | |
tree | a9bf6654498c49b09a46c2909de19a32a297e1a4 | |
parent | 192df6ef4772535b110957eb684da72237f9a510 (diff) |
QVariant: fix conversions of Q_ENUM that are QFlags<> to string
The doc of QMetaEnum::valueToKey() says to use ::valueToKeys() instead
for flag types.
Change-Id: I48e5ba47324137f2ce2710f1d876e93e7c562e9f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
(cherry picked from commit 54aa7e75b89d5d27e59594ce35206089ccc22d3b)
-rw-r--r-- | src/corelib/kernel/qmetatype.cpp | 18 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp | 2 |
2 files changed, 15 insertions, 5 deletions
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index e35a8b3c31..ec07dda5cd 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -1843,11 +1843,19 @@ static bool convertFromEnum(QMetaType fromType, const void *from, QMetaType toTy #ifndef QT_NO_QOBJECT QMetaEnum en = metaEnumFromType(fromType); if (en.isValid()) { - const char *key = en.valueToKey(ll); - if (toType.id() == QMetaType::QString) - *static_cast<QString *>(to) = QString::fromUtf8(key); - else - *static_cast<QByteArray *>(to) = key; + if (en.isFlag()) { + const QByteArray keys = en.valueToKeys(ll); + if (toType.id() == QMetaType::QString) + *static_cast<QString *>(to) = QString::fromUtf8(keys); + else + *static_cast<QByteArray *>(to) = keys; + } else { + const char *key = en.valueToKey(ll); + if (toType.id() == QMetaType::QString) + *static_cast<QString *>(to) = QString::fromUtf8(key); + else + *static_cast<QByteArray *>(to) = key; + } return true; } #endif diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index e7f2c2bd9a..05808d3555 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -4720,6 +4720,8 @@ void tst_QVariant::metaEnums() testVariantMeta(Qt::RichText, &ok, "RichText"); testVariantMeta(Qt::Alignment(Qt::AlignBottom), &ok, "AlignBottom"); + testVariantMeta(Qt::Alignment(Qt::AlignHCenter | Qt::AlignBottom), &ok, + "AlignHCenter|AlignBottom"); } void tst_QVariant::nullConvert() |