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
qtablewidget_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 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 QTABLEWIDGET_P_H
6#define QTABLEWIDGET_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. This header file may change
13// from version to version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtWidgets/private/qtwidgetsglobal_p.h>
19#include <qheaderview.h>
20#include <qtablewidget.h>
21#include <qabstractitemmodel.h>
22#include <private/qabstractitemmodel_p.h>
23#include <private/qtableview_p.h>
24#include <private/qwidgetitemdata_p.h>
25
26#include <array>
27
29
30QT_BEGIN_NAMESPACE
31
32class QTableWidgetMimeData : public QMimeData
33{
34 Q_OBJECT
35public:
36 QList<QTableWidgetItem*> items;
37};
38
40{
41public:
42 inline bool operator()(QTableWidgetItem *i1, QTableWidgetItem *i2) const
43 { return (*i1 < *i2); }
44};
45
47{
48public:
49 inline bool operator()(QTableWidgetItem *i1, QTableWidgetItem *i2) const
50 { return (*i2 < *i1); }
51};
52
54{
56 friend class QTableWidget;
57
58public:
59 QTableModel(int rows, int columns, QTableWidget *parent);
60 ~QTableModel();
61
62 inline QTableWidget *view() const { return qobject_cast<QTableWidget *>(QObject::parent()); }
63
64 bool insertRows(int row, int count = 1, const QModelIndex &parent = QModelIndex()) override;
65 bool insertColumns(int column, int count = 1, const QModelIndex &parent = QModelIndex()) override;
66
67 bool removeRows(int row, int count = 1, const QModelIndex &parent = QModelIndex()) override;
68 bool removeColumns(int column, int count = 1, const QModelIndex &parent = QModelIndex()) override;
69
70 bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild) override;
71
72 void setItem(int row, int column, QTableWidgetItem *item);
73 QTableWidgetItem *takeItem(int row, int column);
74 QTableWidgetItem *item(int row, int column) const;
75 QTableWidgetItem *item(const QModelIndex &index) const;
76 void removeItem(QTableWidgetItem *item);
77
78 void setHorizontalHeaderItem(int section, QTableWidgetItem *item);
79 void setVerticalHeaderItem(int section, QTableWidgetItem *item);
84
85 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override
86 { return QAbstractTableModel::index(row, column, parent); }
87
88 QModelIndex index(const QTableWidgetItem *item) const;
89
90 void setRowCount(int rows);
91 void setColumnCount(int columns);
92
93 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
94 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
95
96 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
97 bool setData(const QModelIndex &index, const QVariant &value, int role) override;
98 bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) override;
99 bool clearItemData(const QModelIndex &index) override;
100
101 QMap<int, QVariant> itemData(const QModelIndex &index) const override;
102
103 QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
104 bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role) override;
105
106 Qt::ItemFlags flags(const QModelIndex &index) const override;
107
108 void sort(int column, Qt::SortOrder order) override;
109 static bool itemLessThan(const std::pair<QTableWidgetItem*,int> &left,
110 const std::pair<QTableWidgetItem*,int> &right);
111 static bool itemGreaterThan(const std::pair<QTableWidgetItem*,int> &left,
112 const std::pair<QTableWidgetItem*,int> &right);
113
114 void ensureSorted(int column, Qt::SortOrder order, int start, int end);
115 QList<QTableWidgetItem *> columnItems(int column) const;
116 void updateRowIndexes(QModelIndexList &indexes, int movedFromRow, int movedToRow);
118 sortedInsertionIterator(const QList<QTableWidgetItem *>::iterator &begin,
119 const QList<QTableWidgetItem *>::iterator &end, Qt::SortOrder order,
120 QTableWidgetItem *item);
121
122 bool isValid(const QModelIndex &index) const;
123 inline long tableIndex(int row, int column) const
124 { return (row * horizontalHeaderItems.size()) + column; }
125
126 void clear();
127 void clearContents();
128 void itemChanged(QTableWidgetItem *item, const QList<int> &roles = QList<int>());
129
131 const QTableWidgetItem *itemPrototype() const;
132 void setItemPrototype(const QTableWidgetItem *item);
133
134 // dnd
135 QStringList mimeTypes() const override;
136 QMimeData *mimeData(const QModelIndexList &indexes) const override;
137 bool dropMimeData(const QMimeData *data, Qt::DropAction action,
138 int row, int column, const QModelIndex &parent) override;
139 Qt::DropActions supportedDropActions() const override;
140 Qt::DropActions supportedDragActions() const override;
141
142 QMimeData *internalMimeData() const;
143
144private:
145 const QTableWidgetItem *prototype;
146 QList<QTableWidgetItem *> tableItems;
147 QList<QTableWidgetItem *> verticalHeaderItems;
148 QList<QTableWidgetItem *> horizontalHeaderItems;
149
150 // A cache must be mutable if get-functions should have const modifiers
151 mutable QModelIndexList cachedIndexes;
152};
153
155{
156 Q_DECLARE_PUBLIC(QTableWidget)
157public:
159 inline QTableModel *tableModel() const { return qobject_cast<QTableModel*>(model); }
160 void setup();
161 void clearConnections();
162
163 // view signals
164 void emitItemPressed(const QModelIndex &index);
165 void emitItemClicked(const QModelIndex &index);
166 void emitItemDoubleClicked(const QModelIndex &index);
167 void emitItemActivated(const QModelIndex &index);
168 void emitItemEntered(const QModelIndex &index);
169 // model signals
170 void emitItemChanged(const QModelIndex &index);
171 // selection signals
172 void emitCurrentItemChanged(const QModelIndex &previous, const QModelIndex &current);
173 // sorting
174 void sort();
175 void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
176
179};
180
182{
183public:
184 QTableWidgetItemPrivate(QTableWidgetItem *item) : q(item), id(-1), headerItem(false) {}
186 int id;
187 bool headerItem; // Qt 7 TODO: inline this stuff in the public class.
188};
189
190QT_END_NAMESPACE
191
192#endif // QTABLEWIDGET_P_H
\inmodule QtCore
constexpr QModelIndex() noexcept
Creates a new empty model index.
bool operator()(QTableWidgetItem *i1, QTableWidgetItem *i2) const
bool operator()(QTableWidgetItem *i1, QTableWidgetItem *i2) const
void removeItem(QTableWidgetItem *item)
void setRowCount(int rows)
bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild) override
int columnCount(const QModelIndex &parent=QModelIndex()) const override
Returns the number of columns for the children of the given parent.
QTableWidgetItem * verticalHeaderItem(int section)
Qt::ItemFlags flags(const QModelIndex &index) const override
\reimp
void setVerticalHeaderItem(int section, QTableWidgetItem *item)
bool clearItemData(const QModelIndex &index) override
void ensureSorted(int column, Qt::SortOrder order, int start, int end)
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role) override
Sets the data for the given role and section in the header with the specified orientation to the valu...
void setItemPrototype(const QTableWidgetItem *item)
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Returns the number of rows under the given parent.
QMap< int, QVariant > itemData(const QModelIndex &index) const override
Returns a map with values for all predefined roles in the model for the item at the given index.
QTableWidgetItem * takeHorizontalHeaderItem(int section)
void setItem(int row, int column, QTableWidgetItem *item)
Qt::DropActions supportedDragActions() const override
Returns the actions supported by the data in this model.
bool insertRows(int row, int count=1, const QModelIndex &parent=QModelIndex()) override
QStringList mimeTypes() const override
Returns the list of allowed MIME types.
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
Returns the data for the given role and section in the header with the specified orientation.
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
\reimp
bool isValid(const QModelIndex &index) const
QTableWidgetItem * createItem() const
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
Returns the index of the data in row and column with parent.
static QList< QTableWidgetItem * >::iterator sortedInsertionIterator(const QList< QTableWidgetItem * >::iterator &begin, const QList< QTableWidgetItem * >::iterator &end, Qt::SortOrder order, QTableWidgetItem *item)
QTableWidgetItem * horizontalHeaderItem(int section)
void setHorizontalHeaderItem(int section, QTableWidgetItem *item)
void itemChanged(QTableWidgetItem *item, const QList< int > &roles=QList< int >())
QTableWidgetItem * item(const QModelIndex &index) const
QMimeData * internalMimeData() const
QTableWidget * view() const
const QTableWidgetItem * itemPrototype() const
bool insertColumns(int column, int count=1, const QModelIndex &parent=QModelIndex()) override
bool setData(const QModelIndex &index, const QVariant &value, int role) override
Sets the role data for the item at index to value.
bool removeColumns(int column, int count=1, const QModelIndex &parent=QModelIndex()) override
QTableWidgetItem * takeItem(int row, int column)
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
Returns the data stored under the given role for the item referred to by the index.
void setColumnCount(int columns)
bool setItemData(const QModelIndex &index, const QMap< int, QVariant > &roles) override
Sets the role data for the item at index to the associated value in roles, for every Qt::ItemDataRole...
void sort(int column, Qt::SortOrder order) override
QMimeData * mimeData(const QModelIndexList &indexes) const override
Returns an object that contains serialized items of data corresponding to the list of indexes specifi...
bool removeRows(int row, int count=1, const QModelIndex &parent=QModelIndex()) override
QModelIndex index(const QTableWidgetItem *item) const
long tableIndex(int row, int column) const
static bool itemLessThan(const std::pair< QTableWidgetItem *, int > &left, const std::pair< QTableWidgetItem *, int > &right)
QTableModel(int rows, int columns, QTableWidget *parent)
QList< QTableWidgetItem * > columnItems(int column) const
void updateRowIndexes(QModelIndexList &indexes, int movedFromRow, int movedToRow)
void clearContents()
Qt::DropActions supportedDropActions() const override
static bool itemGreaterThan(const std::pair< QTableWidgetItem *, int > &left, const std::pair< QTableWidgetItem *, int > &right)
QTableWidgetItem * takeVerticalHeaderItem(int section)
QTableWidgetItem * item(int row, int column) const
QTableWidgetItemPrivate(QTableWidgetItem *item)
QTableWidgetItem * q
void emitItemPressed(const QModelIndex &index)
void emitCurrentItemChanged(const QModelIndex &previous, const QModelIndex &current)
void emitItemActivated(const QModelIndex &index)
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
void emitItemClicked(const QModelIndex &index)
std::array< QMetaObject::Connection, 10 > connections
void emitItemDoubleClicked(const QModelIndex &index)
std::optional< Qt::DropActions > supportedDragActions
void emitItemChanged(const QModelIndex &index)
void emitItemEntered(const QModelIndex &index)
QList< QModelIndex > QModelIndexList
QT_REQUIRE_CONFIG(tablewidget)