summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2025-07-30 15:27:40 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2025-07-31 20:06:05 +0200
commitbe3f0852aaaadcc9d6491550bf1f29d6af33f413 (patch)
treef003fed1fb48cc5c9f150fbd0c68da88f7752df0
parent6e831c7418f8ebdb93761a96005c12e0ed4894c6 (diff)
QRM: move generic roleNames() implementation out of template class
The implementation works on any meta object, so extract that logic into a helper that takes one, and move the implementation into the .cpp file. This reduced the amount of generated code. Pick-to: 6.10 Change-Id: I701f2f448be739e48fca0f9d31da0ef05f2bbd20 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
-rw-r--r--src/corelib/itemmodels/qrangemodel.cpp16
-rw-r--r--src/corelib/itemmodels/qrangemodel_impl.h17
2 files changed, 20 insertions, 13 deletions
diff --git a/src/corelib/itemmodels/qrangemodel.cpp b/src/corelib/itemmodels/qrangemodel.cpp
index 3c640f85378..8f1675e9d09 100644
--- a/src/corelib/itemmodels/qrangemodel.cpp
+++ b/src/corelib/itemmodels/qrangemodel.cpp
@@ -1014,6 +1014,22 @@ void QRangeModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDat
\sa QAbstractItemModel::roleNames()
*/
+QHash<int, QByteArray> QRangeModelImplBase::roleNamesForMetaObject(const QMetaObject &metaObject) const
+{
+ const auto defaults = itemModel().QAbstractItemModel::roleNames();
+ QHash<int, QByteArray> result;
+ const int offset = metaObject.propertyOffset();
+ for (int i = offset; i < metaObject.propertyCount(); ++i) {
+ const auto name = metaObject.property(i).name();
+ const int defaultRole = defaults.key(name, -1);
+ if (defaultRole != -1)
+ result[defaultRole] = name;
+ else
+ result[Qt::UserRole + i - offset] = name;
+ }
+ return result;
+}
+
/*!
\reimp
diff --git a/src/corelib/itemmodels/qrangemodel_impl.h b/src/corelib/itemmodels/qrangemodel_impl.h
index 3eecf4e2d09..c52867753c3 100644
--- a/src/corelib/itemmodels/qrangemodel_impl.h
+++ b/src/corelib/itemmodels/qrangemodel_impl.h
@@ -735,6 +735,9 @@ protected:
inline void endMoveRows();
inline QAbstractItemModel &itemModel();
inline const QAbstractItemModel &itemModel() const;
+
+ // implemented in qrangemodel.cpp
+ Q_CORE_EXPORT QHash<int, QByteArray> roleNamesForMetaObject(const QMetaObject &metaObject) const;
};
template <typename Structure, typename Range,
@@ -1318,19 +1321,7 @@ public:
// will be 'void' if columns don't all have the same type
using item_type = typename row_traits::item_type;
if constexpr (QRangeModelDetails::has_metaobject_v<item_type>) {
- const QMetaObject &metaObject = QRangeModelDetails::wrapped_t<item_type>::staticMetaObject;
- const auto defaults = itemModel().QAbstractItemModel::roleNames();
- QHash<int, QByteArray> result;
- const int offset = metaObject.propertyOffset();
- for (int i = offset; i < metaObject.propertyCount(); ++i) {
- const auto name = metaObject.property(i).name();
- const int defaultRole = defaults.key(name, -1);
- if (defaultRole != -1)
- result[defaultRole] = name;
- else
- result[Qt::UserRole + i - offset] = name;
- }
- return result;
+ return roleNamesForMetaObject(QRangeModelDetails::wrapped_t<item_type>::staticMetaObject);
}
return itemModel().QAbstractItemModel::roleNames();