Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qrangemodel.h
Go to the documentation of this file.
1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QRANGEMODEL_H
6#define QRANGEMODEL_H
7
8#include <QtCore/qrangemodel_impl.h>
9
10QT_BEGIN_NAMESPACE
11
12class QRangeModelPrivate;
13
14class Q_CORE_EXPORT QRangeModel : public QAbstractItemModel
15{
16 Q_OBJECT
17 Q_PROPERTY(QHash<int, QByteArray> roleNames READ roleNames WRITE setRoleNames RESET resetRoleNames
18 NOTIFY roleNamesChanged FINAL)
19 Q_PROPERTY(AutoConnectPolicy autoConnectPolicy READ autoConnectPolicy WRITE setAutoConnectPolicy
20 NOTIFY autoConnectPolicyChanged FINAL REVISION(6, 11))
22public:
23 enum class AutoConnectPolicy {
24 None,
25 Full,
26 OnRead,
27 };
28 Q_ENUM(AutoConnectPolicy)
30 enum class RowCategory {
31 Default,
32 MultiRoleItem,
33 };
35 template <typename T>
36 struct RowOptions {};
38 template <typename T>
39 struct ItemAccess {};
40
41 template <typename Range,
42 QRangeModelDetails::if_table_range<Range> = true>
43 explicit QRangeModel(Range &&range, QObject *parent = nullptr)
44 : QRangeModel(new QGenericTableItemModelImpl<Range>(std::forward<Range>(range), this), parent)
45 {}
46
47 template <typename Range,
48 QRangeModelDetails::if_tree_range<Range> = true>
49 explicit QRangeModel(Range &&range, QObject *parent = nullptr)
50 : QRangeModel(std::forward<Range>(range), QRangeModelDetails::DefaultTreeProtocol<Range>{},
51 parent)
52 {}
53
54 template <typename Range, typename Protocol,
55 QRangeModelDetails::if_tree_range<Range, Protocol> = true>
56 explicit QRangeModel(Range &&range, Protocol &&protocol, QObject *parent = nullptr)
57 : QRangeModel(new QGenericTreeItemModelImpl<Range, Protocol>(std::forward<Range>(range),
58 std::forward<Protocol>(protocol),
59 this),
60 parent)
61 {}
62
63 ~QRangeModel() override;
64
65 QModelIndex index(int row, int column, const QModelIndex &parent = {}) const final;
66 QModelIndex parent(const QModelIndex &child) const final;
67 QModelIndex sibling(int row, int column, const QModelIndex &index) const final;
68 int rowCount(const QModelIndex &parent = {}) const final;
69 int columnCount(const QModelIndex &parent = {}) const final;
70 Qt::ItemFlags flags(const QModelIndex &index) const override;
71 QVariant headerData(int section, Qt::Orientation orientation,
72 int role = Qt::DisplayRole) const override;
73 bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &data,
74 int role = Qt::EditRole) override;
75 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
76 bool setData(const QModelIndex &index, const QVariant &data, int role = Qt::EditRole) override;
77 QMap<int, QVariant> itemData(const QModelIndex &index) const override;
78 bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &data) override;
79 bool clearItemData(const QModelIndex &index) override;
80 bool insertColumns(int column, int count, const QModelIndex &parent = {}) final;
81 bool removeColumns(int column, int count, const QModelIndex &parent = {}) final;
82 bool moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count,
83 const QModelIndex &destParent, int destColumn) final;
84 bool insertRows(int row, int count, const QModelIndex &parent = {}) final;
85 bool removeRows(int row, int count, const QModelIndex &parent = {}) final;
86 bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count,
87 const QModelIndex &destParent, int destRow) final;
88
89 QHash<int, QByteArray> roleNames() const override;
90 void setRoleNames(const QHash<int, QByteArray> &names);
91 void resetRoleNames();
92
93 bool canFetchMore(const QModelIndex &parent) const override;
94 void fetchMore(const QModelIndex &parent) override;
95
96 bool hasChildren(const QModelIndex &parent = QModelIndex()) const final;
97 QModelIndex buddy(const QModelIndex &index) const override;
98 bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column,
99 const QModelIndex &parent) const override;
100 bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column,
101 const QModelIndex &parent) override;
102 QMimeData *mimeData(const QModelIndexList &indexes) const override;
103 QStringList mimeTypes() const override;
104 QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits,
105 Qt::MatchFlags flags) const override;
106 void multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const override;
107 void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
108 QSize span(const QModelIndex &index) const override;
109 Qt::DropActions supportedDragActions() const override;
110 Qt::DropActions supportedDropActions() const override;
111
112 AutoConnectPolicy autoConnectPolicy() const;
113 void setAutoConnectPolicy(AutoConnectPolicy policy);
115Q_SIGNALS:
116 void roleNamesChanged();
117 Q_REVISION(6, 11) void autoConnectPolicyChanged();
118
119protected Q_SLOTS:
120 void resetInternalData() override;
121
122protected:
123 bool event(QEvent *) override;
124 bool eventFilter(QObject *, QEvent *) override;
125
126private:
127 Q_DISABLE_COPY_MOVE(QRangeModel)
128 Q_DECLARE_PRIVATE(QRangeModel)
130 explicit QRangeModel(QRangeModelImplBase *impl, QObject *parent);
131 friend class QRangeModelImplBase;
132};
133
134// implementation of forwarders
135QModelIndex QRangeModelImplBase::createIndex(int row, int column, const void *ptr) const
136{
137 return m_rangeModel->createIndex(row, column, ptr);
138}
139void QRangeModelImplBase::changePersistentIndexList(const QModelIndexList &from,
140 const QModelIndexList &to)
141{
142 m_rangeModel->changePersistentIndexList(from, to);
143}
144QHash<int, QByteArray> QRangeModelImplBase::roleNames() const
145{
146 return m_rangeModel->roleNames();
147}
148void QRangeModelImplBase::dataChanged(const QModelIndex &from, const QModelIndex &to,
149 const QList<int> &roles)
150{
151 m_rangeModel->dataChanged(from, to, roles);
152}
153void QRangeModelImplBase::beginResetModel()
154{
155 m_rangeModel->beginResetModel();
156}
157void QRangeModelImplBase::endResetModel()
158{
159 m_rangeModel->endResetModel();
160}
161void QRangeModelImplBase::beginInsertColumns(const QModelIndex &parent, int start, int count)
162{
163 m_rangeModel->beginInsertColumns(parent, start, count);
164}
165void QRangeModelImplBase::endInsertColumns()
166{
167 m_rangeModel->endInsertColumns();
168}
169void QRangeModelImplBase::beginRemoveColumns(const QModelIndex &parent, int start, int count)
170{
171 m_rangeModel->beginRemoveColumns(parent, start, count);
172}
173void QRangeModelImplBase::endRemoveColumns()
174{
175 m_rangeModel->endRemoveColumns();
176}
177bool QRangeModelImplBase::beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst,
178 int sourceLast, const QModelIndex &destParent,
179 int destColumn)
180{
181 return m_rangeModel->beginMoveColumns(sourceParent, sourceFirst, sourceLast,
182 destParent, destColumn);
183}
184void QRangeModelImplBase::endMoveColumns()
185{
186 m_rangeModel->endMoveColumns();
187}
188
189void QRangeModelImplBase::beginInsertRows(const QModelIndex &parent, int start, int count)
190{
191 m_rangeModel->beginInsertRows(parent, start, count);
192}
193void QRangeModelImplBase::endInsertRows()
194{
195 m_rangeModel->endInsertRows();
196}
197void QRangeModelImplBase::beginRemoveRows(const QModelIndex &parent, int start, int count)
198{
199 m_rangeModel->beginRemoveRows(parent, start, count);
200}
201void QRangeModelImplBase::endRemoveRows()
202{
203 m_rangeModel->endRemoveRows();
204}
205bool QRangeModelImplBase::beginMoveRows(const QModelIndex &sourceParent, int sourceFirst,
206 int sourceLast,
207 const QModelIndex &destParent, int destRow)
208{
209 return m_rangeModel->beginMoveRows(sourceParent, sourceFirst, sourceLast, destParent, destRow);
210}
211void QRangeModelImplBase::endMoveRows()
212{
213 m_rangeModel->endMoveRows();
214}
215QAbstractItemModel &QRangeModelImplBase::itemModel()
216{
217 return *m_rangeModel;
218}
219const QAbstractItemModel &QRangeModelImplBase::itemModel() const
220{
221 return *m_rangeModel;
222}
223
224QRangeModelImplBase::AutoConnectPolicy QRangeModelImplBase::autoConnectPolicy() const
225{
226 return QRangeModelImplBase::AutoConnectPolicy(m_rangeModel->autoConnectPolicy());
227}
228
229// Helper templates that we can forward declare in the _impl header,
230// where QRangeModel is not yet defined.
231namespace QRangeModelDetails
232{
233template <typename T>
235
236template <typename T>
238}
239
240QT_END_NAMESPACE
241
242
243#endif // QRANGEMODEL_H
\inmodule QtCore
Definition qrangemodel.h:15
static bool connectPropertiesHelper(const QModelIndex &index, QObject *item, QObject *context, const QHash< int, QMetaProperty > &properties)
~ConstPropertyChangedHandler()=default
ConstPropertyChangedHandler(ConstPropertyChangedHandler &&other) noexcept=default
ConstPropertyChangedHandler(const QModelIndex &index, int role)
PropertyChangedHandler & operator=(PropertyChangedHandler &&)=delete
PropertyChangedHandler(PropertyChangedHandler &&other) noexcept
PropertyChangedHandler(const PropertyChangedHandler &)=delete
PropertyChangedHandler & operator=(const PropertyChangedHandler &)=delete
~PropertyChangedHandler()=default
PropertyChangedHandler & operator=(const QMetaObject::Connection &connection) noexcept
PropertyChangedHandler(const QPersistentModelIndex &index, int role)