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;
13class QCollator;
14
15class Q_CORE_EXPORT QRangeModel : public QAbstractItemModel
16{
17 Q_OBJECT
18 Q_PROPERTY(QHash<int, QByteArray> roleNames READ roleNames WRITE setRoleNames RESET resetRoleNames
19 NOTIFY roleNamesChanged FINAL)
20 Q_PROPERTY(AutoConnectPolicy autoConnectPolicy READ autoConnectPolicy WRITE setAutoConnectPolicy
21 NOTIFY autoConnectPolicyChanged REVISION(6, 11))
22 Q_PROPERTY(int sortRole READ sortRole WRITE setSortRole RESET resetSortRole
23 NOTIFY sortRoleChanged REVISION(6, 12))
24 Q_PROPERTY(QCollator sortCollator READ sortCollator WRITE setSortCollator
25 RESET resetSortCollator NOTIFY sortCollatorChanged REVISION(6, 12))
26 Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
28public:
29 enum class AutoConnectPolicy {
30 None,
31 Full,
32 OnRead,
33 };
34 Q_ENUM(AutoConnectPolicy)
35
36 enum class RowCategory {
37 Default,
38 MultiRoleItem,
39 };
40
41 template <typename T>
42 struct RowOptions {};
43
44 template <typename T>
45 struct ItemAccess {};
46
47 template <typename Range,
48 QRangeModelDetails::if_table_range<Range> = true>
49 explicit QRangeModel(Range &&range, QObject *parent = nullptr)
50 : QRangeModel(new QGenericTableItemModelImpl<Range>(std::forward<Range>(range), this), parent)
51 {}
52
53 template <typename Range,
54 QRangeModelDetails::if_tree_range<Range> = true>
55 explicit QRangeModel(Range &&range, QObject *parent = nullptr)
56 : QRangeModel(std::forward<Range>(range), QRangeModelDetails::DefaultTreeProtocol<Range>{},
57 parent)
58 {}
59
60 template <typename Range, typename Protocol,
61 QRangeModelDetails::if_tree_range<Range, Protocol> = true>
62 explicit QRangeModel(Range &&range, Protocol &&protocol, QObject *parent = nullptr)
63 : QRangeModel(new QGenericTreeItemModelImpl<Range, Protocol>(std::forward<Range>(range),
64 std::forward<Protocol>(protocol),
65 this),
66 parent)
67 {}
68
69 ~QRangeModel() override;
70
71 QModelIndex index(int row, int column, const QModelIndex &parent = {}) const final;
72 QModelIndex parent(const QModelIndex &child) const final;
73 QModelIndex sibling(int row, int column, const QModelIndex &index) const final;
74 int rowCount(const QModelIndex &parent = {}) const final;
75 int columnCount(const QModelIndex &parent = {}) const final;
76 Qt::ItemFlags flags(const QModelIndex &index) const override;
77 QVariant headerData(int section, Qt::Orientation orientation,
78 int role = Qt::DisplayRole) const override;
79 bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &data,
80 int role = Qt::EditRole) override;
81 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
82 bool setData(const QModelIndex &index, const QVariant &data, int role = Qt::EditRole) override;
83 QMap<int, QVariant> itemData(const QModelIndex &index) const override;
84 bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &data) override;
85 bool clearItemData(const QModelIndex &index) override;
86 bool insertColumns(int column, int count, const QModelIndex &parent = {}) final;
87 bool removeColumns(int column, int count, const QModelIndex &parent = {}) final;
88 bool moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count,
89 const QModelIndex &destParent, int destColumn) final;
90 bool insertRows(int row, int count, const QModelIndex &parent = {}) final;
91 bool removeRows(int row, int count, const QModelIndex &parent = {}) final;
92 bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count,
93 const QModelIndex &destParent, int destRow) final;
94
95 QHash<int, QByteArray> roleNames() const override;
96 void setRoleNames(const QHash<int, QByteArray> &names);
97 void resetRoleNames();
98
99 bool canFetchMore(const QModelIndex &parent) const override;
100 void fetchMore(const QModelIndex &parent) override;
101
102 bool hasChildren(const QModelIndex &parent = QModelIndex()) const final;
103 QModelIndex buddy(const QModelIndex &index) const override;
104 bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column,
105 const QModelIndex &parent) const override;
106 bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column,
107 const QModelIndex &parent) override;
108 QMimeData *mimeData(const QModelIndexList &indexes) const override;
109 QStringList mimeTypes() const override;
110 QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits,
111 Qt::MatchFlags flags) const override;
112 void multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const override;
113 void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
114
115 QCollator sortCollator() const;
116 void setSortCollator(const QCollator &collator);
117 void resetSortCollator();
118
119 int sortRole() const;
120 void setSortRole(int role);
121 void resetSortRole();
122
123 QSize span(const QModelIndex &index) const override;
124 Qt::DropActions supportedDragActions() const override;
125 Qt::DropActions supportedDropActions() const override;
126
127 AutoConnectPolicy autoConnectPolicy() const;
128 void setAutoConnectPolicy(AutoConnectPolicy policy);
130Q_SIGNALS:
131 void roleNamesChanged();
132 Q_REVISION(6, 11) void autoConnectPolicyChanged(AutoConnectPolicy policy);
133 Q_REVISION(6, 12) void sortRoleChanged(int role);
134 Q_REVISION(6, 12) void sortCollatorChanged(const QCollator &collator);
135
136protected Q_SLOTS:
137 void resetInternalData() override;
138
139protected:
140 bool event(QEvent *) override;
141 bool eventFilter(QObject *, QEvent *) override;
142
143private:
144 Q_DISABLE_COPY_MOVE(QRangeModel)
145 Q_DECLARE_PRIVATE(QRangeModel)
146
147 explicit QRangeModel(QRangeModelImplBase *impl, QObject *parent);
148 friend class QRangeModelImplBase;
149};
150
151// implementation of forwarders
152QModelIndex QRangeModelImplBase::createIndex(int row, int column, const void *ptr) const
153{
154 return m_rangeModel->createIndex(row, column, ptr);
155}
156QModelIndexList QRangeModelImplBase::persistentIndexList() const
157{
158 return m_rangeModel->persistentIndexList();
159}
160void QRangeModelImplBase::changePersistentIndex(const QModelIndex &from,
161 const QModelIndex &to)
162{
163 m_rangeModel->changePersistentIndex(from, to);
164}
165QHash<int, QByteArray> QRangeModelImplBase::roleNames() const
166{
167 return m_rangeModel->roleNames();
168}
169void QRangeModelImplBase::dataChanged(const QModelIndex &from, const QModelIndex &to,
170 const QList<int> &roles)
171{
172 m_rangeModel->dataChanged(from, to, roles);
173}
174void QRangeModelImplBase::beginResetModel()
175{
176 m_rangeModel->beginResetModel();
177}
178void QRangeModelImplBase::endResetModel()
179{
180 m_rangeModel->endResetModel();
181}
182void QRangeModelImplBase::beginInsertColumns(const QModelIndex &parent, int start, int count)
183{
184 m_rangeModel->beginInsertColumns(parent, start, count);
185}
186void QRangeModelImplBase::endInsertColumns()
187{
188 m_rangeModel->endInsertColumns();
189}
190void QRangeModelImplBase::beginRemoveColumns(const QModelIndex &parent, int start, int count)
191{
192 m_rangeModel->beginRemoveColumns(parent, start, count);
193}
194void QRangeModelImplBase::endRemoveColumns()
195{
196 m_rangeModel->endRemoveColumns();
197}
198bool QRangeModelImplBase::beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst,
199 int sourceLast, const QModelIndex &destParent,
200 int destColumn)
201{
202 return m_rangeModel->beginMoveColumns(sourceParent, sourceFirst, sourceLast,
203 destParent, destColumn);
204}
205void QRangeModelImplBase::endMoveColumns()
206{
207 m_rangeModel->endMoveColumns();
208}
209
210void QRangeModelImplBase::beginInsertRows(const QModelIndex &parent, int start, int count)
211{
212 m_rangeModel->beginInsertRows(parent, start, count);
213}
214void QRangeModelImplBase::endInsertRows()
215{
216 m_rangeModel->endInsertRows();
217}
218void QRangeModelImplBase::beginRemoveRows(const QModelIndex &parent, int start, int count)
219{
220 m_rangeModel->beginRemoveRows(parent, start, count);
221}
222void QRangeModelImplBase::endRemoveRows()
223{
224 m_rangeModel->endRemoveRows();
225}
226bool QRangeModelImplBase::beginMoveRows(const QModelIndex &sourceParent, int sourceFirst,
227 int sourceLast,
228 const QModelIndex &destParent, int destRow)
229{
230 return m_rangeModel->beginMoveRows(sourceParent, sourceFirst, sourceLast, destParent, destRow);
231}
232void QRangeModelImplBase::endMoveRows()
233{
234 m_rangeModel->endMoveRows();
235}
236void QRangeModelImplBase::beginLayoutChange()
237{
238 Q_EMIT m_rangeModel->layoutAboutToBeChanged();
239}
240void QRangeModelImplBase::endLayoutChange()
241{
242 Q_EMIT m_rangeModel->layoutChanged();
243}
244
245QAbstractItemModel &QRangeModelImplBase::itemModel()
246{
247 return *m_rangeModel;
248}
249const QAbstractItemModel &QRangeModelImplBase::itemModel() const
250{
251 return *m_rangeModel;
252}
253
254QRangeModelImplBase::AutoConnectPolicy QRangeModelImplBase::autoConnectPolicy() const
255{
256 return QRangeModelImplBase::AutoConnectPolicy(m_rangeModel->autoConnectPolicy());
257}
258
259Qt::partial_ordering QRangeModelImplBase::compareData(const QVariant &lhs, const QVariant &rhs,
260 const QCollator *collator)
261{
262 return QRangeModel::compareData(lhs, rhs, collator);
263}
264
265// Helper templates that we can forward declare in the _impl header,
266// where QRangeModel is not yet defined.
267namespace QRangeModelDetails
268{
269template <typename T>
271
272template <typename T>
274}
275
276QT_END_NAMESPACE
277
278
279#endif // QRANGEMODEL_H
\inmodule QtCore
Definition qrangemodel.h:16
static bool connectPropertiesHelper(const QModelIndex &index, const QObject *item, QRangeModelDetails::AutoConnectContext *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(const QPersistentModelIndex &index, int role)
PropertyChangedHandler & operator=(QMetaObject::Connection &&connection)