summaryrefslogtreecommitdiffstats
path: root/src/corelib/itemmodels/qabstractitemmodel_p.h
diff options
context:
space:
mode:
authorJonas Kvinge <jonas@jkvinge.net>2022-05-18 00:16:10 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2022-05-22 09:50:15 +0000
commit54d81d118997fc4c238b7266571d220d7a6065f1 (patch)
treedac3c81b9a6d5a3fee05ae1aa80cbb2398b8dca1 /src/corelib/itemmodels/qabstractitemmodel_p.h
parentc613dd4765637a00837dd66abc2b940632022a60 (diff)
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 Pick-to: 6.2 6.3 Change-Id: If0291b99606787081c4bc26fd00431f8a17a61a2 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src/corelib/itemmodels/qabstractitemmodel_p.h')
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel_p.h12
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();
}