diff options
| author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2025-07-30 15:27:40 +0200 |
|---|---|---|
| committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2025-07-31 20:06:05 +0200 |
| commit | be3f0852aaaadcc9d6491550bf1f29d6af33f413 (patch) | |
| tree | f003fed1fb48cc5c9f150fbd0c68da88f7752df0 | |
| parent | 6e831c7418f8ebdb93761a96005c12e0ed4894c6 (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.cpp | 16 | ||||
| -rw-r--r-- | src/corelib/itemmodels/qrangemodel_impl.h | 17 |
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(); |
