QAbstractItemModel: Fix Qt::TextAlignmentRole when metatype is uint

When combining text alignment flags, it no longer works since the
metatype for example QVariant(Qt::AlignRight | Qt::AlignVCenter) is
uint, not int.

Fixes: QTBUG-103576
Change-Id: If0291b99606787081c4bc26fd00431f8a17a61a2
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 54d81d118997fc4c238b7266571d220d7a6065f1)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Jonas Kvinge 2022-05-18 00:16:10 +02:00 committed by Qt Cherry-pick Bot
parent 200a3c9297
commit a7027b8a43

View File

@ -181,10 +181,12 @@ template <typename T>
T legacyEnumValueFromModelData(const QVariant &data) T legacyEnumValueFromModelData(const QVariant &data)
{ {
static_assert(std::is_enum_v<T>); static_assert(std::is_enum_v<T>);
if (data.userType() == qMetaTypeId<T>()) if (data.userType() == qMetaTypeId<T>()) {
return data.value<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(data.toInt());
}
return T(); return T();
} }
@ -192,10 +194,12 @@ T legacyEnumValueFromModelData(const QVariant &data)
template <typename T> template <typename T>
T legacyFlagValueFromModelData(const QVariant &data) T legacyFlagValueFromModelData(const QVariant &data)
{ {
if (data.userType() == qMetaTypeId<T>()) if (data.userType() == qMetaTypeId<T>()) {
return data.value<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::fromInt(data.toInt());
}
return T(); return T();
} }