diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-04-22 08:25:18 +0200 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-04-22 09:49:48 +0200 |
commit | 26a0a8942135fed725ec3067ba05bae31bb4e645 (patch) | |
tree | 1e9b18d9a51f8e300d6bab042645a5a72c73eac6 /src/corelib/kernel/qmetatype.h | |
parent | 1c80d056e4f45b4ee7c4863cd792e83c889513c5 (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.h | 13 |
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) |