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