diff options
Diffstat (limited to 'src')
| -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(); |
