summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qmetatype.h
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-04-22 08:25:18 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2020-04-22 09:49:48 +0200
commit26a0a8942135fed725ec3067ba05bae31bb4e645 (patch)
tree1e9b18d9a51f8e300d6bab042645a5a72c73eac6 /src/corelib/kernel/qmetatype.h
parent1c80d056e4f45b4ee7c4863cd792e83c889513c5 (diff)
Fix assigning int QFlag-type properties
Ensure they are handled as enumerations in QMetaType. This is required for handling QFlag-type properties in Qt Designer Fixes: QTBUG-83689 Change-Id: Ifbfb5c5b5cd34fce462e299505d063e22e725c2e Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src/corelib/kernel/qmetatype.h')
-rw-r--r--src/corelib/kernel/qmetatype.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index e956d497e9..eb81ac4c28 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -432,7 +432,16 @@ struct ConverterFunctor : public AbstractConverterFunction
struct IsMetaTypePair;
template<typename, typename>
struct MetaTypeSmartPointerHelper;
-}
+
+ template<typename T>
+ struct IsQFlags : std::false_type {};
+
+ template<typename Enum>
+ struct IsQFlags<QFlags<Enum>> : std::true_type {};
+
+ template<typename T>
+ struct IsEnumOrFlags : std::disjunction<std::is_enum<T>, IsQFlags<T>> {};
+} // namespace QtPrivate
class Q_CORE_EXPORT QMetaType {
public:
@@ -1730,7 +1739,7 @@ namespace QtPrivate {
| (IsSharedPointerToTypeDerivedFromQObject<T>::Value ? QMetaType::SharedPointerToQObject : 0)
| (IsWeakPointerToTypeDerivedFromQObject<T>::Value ? QMetaType::WeakPointerToQObject : 0)
| (IsTrackingPointerToTypeDerivedFromQObject<T>::Value ? QMetaType::TrackingPointerToQObject : 0)
- | (std::is_enum<T>::value ? QMetaType::IsEnumeration : 0)
+ | (IsEnumOrFlags<T>::value ? QMetaType::IsEnumeration : 0)
| (IsGadgetHelper<T>::IsGadgetOrDerivedFrom ? QMetaType::IsGadget : 0)
| (IsPointerToGadgetHelper<T>::IsGadgetOrDerivedFrom ? QMetaType::PointerToGadget : 0)
| (QTypeInfo<T>::isPointer ? QMetaType::IsPointer : 0)