diff options
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/itemmodels/qabstractitemmodel_p.h | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/corelib/itemmodels/qabstractitemmodel_p.h b/src/corelib/itemmodels/qabstractitemmodel_p.h index e449e04cb8..e34dc3262c 100644 --- a/src/corelib/itemmodels/qabstractitemmodel_p.h +++ b/src/corelib/itemmodels/qabstractitemmodel_p.h @@ -145,10 +145,12 @@ template <typename T> T legacyEnumValueFromModelData(const QVariant &data) { static_assert(std::is_enum_v<T>); - if (data.userType() == qMetaTypeId<T>()) + if (data.userType() == qMetaTypeId<T>()) { return data.value<T>(); - else if (data.userType() == qMetaTypeId<int>()) + } else if (std::is_same_v<std::underlying_type_t<T>, int> || + std::is_same_v<std::underlying_type_t<T>, uint>) { return T(data.toInt()); + } return T(); } @@ -156,10 +158,12 @@ T legacyEnumValueFromModelData(const QVariant &data) template <typename T> T legacyFlagValueFromModelData(const QVariant &data) { - if (data.userType() == qMetaTypeId<T>()) + if (data.userType() == qMetaTypeId<T>()) { return data.value<T>(); - else if (data.userType() == qMetaTypeId<int>()) + } else if (std::is_same_v<std::underlying_type_t<typename T::enum_type>, int> || + std::is_same_v<std::underlying_type_t<typename T::enum_type>, uint>) { return T::fromInt(data.toInt()); + } return T(); } |