summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEirik Aavitsland <eirik.aavitsland@qt.io>2022-08-29 17:48:27 +0200
committerEirik Aavitsland <eirik.aavitsland@qt.io>2022-09-02 13:13:34 +0000
commitd076c31bfafcf81dbd44b118a28e4e1e3d004ab5 (patch)
treea9bf6654498c49b09a46c2909de19a32a297e1a4
parent192df6ef4772535b110957eb684da72237f9a510 (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.cpp18
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp2
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()