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.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_H
6#define QTABLEWIDGET_H
7
8#include <QtWidgets/qtableview.h>
9#include <QtWidgets/qtwidgetsglobal.h>
10#include <QtCore/qlist.h>
11#include <QtCore/qvariant.h>
12
14
15QT_BEGIN_NAMESPACE
16
17class QTableWidgetSelectionRange
18{
19public:
20 QTableWidgetSelectionRange() = default;
21 QTableWidgetSelectionRange(int top, int left, int bottom, int right)
22 : m_top(top), m_left(left), m_bottom(bottom), m_right(right)
23 {}
24
25 friend bool operator==(const QTableWidgetSelectionRange &lhs,
26 const QTableWidgetSelectionRange &rhs) noexcept
27 {
28 return lhs.m_top == rhs.m_top && lhs.m_left == rhs.m_left && lhs.m_bottom == rhs.m_bottom
29 && lhs.m_right == rhs.m_right;
30 }
31 friend bool operator!=(const QTableWidgetSelectionRange &lhs,
32 const QTableWidgetSelectionRange &rhs) noexcept
33 { return !(lhs == rhs); }
34
35 inline int topRow() const { return m_top; }
36 inline int bottomRow() const { return m_bottom; }
37 inline int leftColumn() const { return m_left; }
38 inline int rightColumn() const { return m_right; }
39 inline int rowCount() const { return m_bottom - m_top + 1; }
40 inline int columnCount() const { return m_right - m_left + 1; }
41private:
42 int m_top = -1, m_left = -1, m_bottom = -2, m_right = -2;
43};
44
45class QTableWidget;
46class QTableModel;
47class QWidgetItemData;
49
50class Q_WIDGETS_EXPORT QTableWidgetItem
51{
52 friend class QTableWidget;
53 friend class QTableModel;
54public:
55 enum ItemType { Type = 0, UserType = 1000 };
56 explicit QTableWidgetItem(int type = Type);
57 explicit QTableWidgetItem(const QString &text, int type = Type);
58 explicit QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type);
59 QTableWidgetItem(const QTableWidgetItem &other);
60 virtual ~QTableWidgetItem();
61
62 virtual QTableWidgetItem *clone() const;
63
64 inline QTableWidget *tableWidget() const { return view; }
65
66 inline int row() const;
67 inline int column() const;
68
69 void setSelected(bool select);
70 bool isSelected() const;
71
72 inline Qt::ItemFlags flags() const { return itemFlags; }
73 void setFlags(Qt::ItemFlags flags);
74
75 inline QString text() const
76 { return data(Qt::DisplayRole).toString(); }
77 inline void setText(const QString &text);
78
79 inline QIcon icon() const
80 { return qvariant_cast<QIcon>(data(Qt::DecorationRole)); }
81 inline void setIcon(const QIcon &icon);
82
83 inline QString statusTip() const
84 { return data(Qt::StatusTipRole).toString(); }
85 inline void setStatusTip(const QString &statusTip);
86
87#if QT_CONFIG(tooltip)
88 inline QString toolTip() const
89 { return data(Qt::ToolTipRole).toString(); }
90 inline void setToolTip(const QString &toolTip);
91#endif
92
93#if QT_CONFIG(whatsthis)
94 inline QString whatsThis() const
95 { return data(Qt::WhatsThisRole).toString(); }
96 inline void setWhatsThis(const QString &whatsThis);
97#endif
98
99 inline QFont font() const
100 { return qvariant_cast<QFont>(data(Qt::FontRole)); }
101 inline void setFont(const QFont &font);
102
103#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
104 inline int textAlignment() const
105 { return data(Qt::TextAlignmentRole).toInt(); }
106#else
107 inline Qt::Alignment textAlignment() const
108 { return qvariant_cast<Qt::Alignment>(data(Qt::TextAlignmentRole)); }
109#endif
110#if QT_DEPRECATED_SINCE(6, 4)
111 QT_DEPRECATED_VERSION_X_6_4("Use the overload taking Qt::Alignment")
112 inline void setTextAlignment(int alignment)
113 { setData(Qt::TextAlignmentRole, alignment); }
114 inline void setTextAlignment(Qt::AlignmentFlag alignment)
115 { setData(Qt::TextAlignmentRole, QVariant::fromValue(Qt::Alignment(alignment))); }
116#endif
117 inline void setTextAlignment(Qt::Alignment alignment)
118 { setData(Qt::TextAlignmentRole, QVariant::fromValue(alignment)); }
119
120 inline QBrush background() const
121 { return qvariant_cast<QBrush>(data(Qt::BackgroundRole)); }
122 inline void setBackground(const QBrush &brush)
123 { setData(Qt::BackgroundRole, brush.style() != Qt::NoBrush ? QVariant(brush) : QVariant()); }
124
125 inline QBrush foreground() const
126 { return qvariant_cast<QBrush>(data(Qt::ForegroundRole)); }
127 inline void setForeground(const QBrush &brush)
128 { setData(Qt::ForegroundRole, brush.style() != Qt::NoBrush ? QVariant(brush) : QVariant()); }
129
130 inline Qt::CheckState checkState() const
131 { return qvariant_cast<Qt::CheckState>(data(Qt::CheckStateRole)); }
132 inline void setCheckState(Qt::CheckState state)
133 { setData(Qt::CheckStateRole, state); }
134
135 inline QSize sizeHint() const
136 { return qvariant_cast<QSize>(data(Qt::SizeHintRole)); }
137 inline void setSizeHint(const QSize &size)
138 { setData(Qt::SizeHintRole, size.isValid() ? QVariant(size) : QVariant()); }
139
140 virtual QVariant data(int role) const;
141 virtual void setData(int role, const QVariant &value);
142
143 virtual bool operator<(const QTableWidgetItem &other) const;
144
145#ifndef QT_NO_DATASTREAM
146 virtual void read(QDataStream &in);
147 virtual void write(QDataStream &out) const;
148#endif
149 QTableWidgetItem &operator=(const QTableWidgetItem &other);
150
151 inline int type() const { return rtti; }
152
153private:
154 QTableModel *tableModel() const;
155
156private:
157 int rtti;
158 QList<QWidgetItemData> values;
159 QTableWidget *view;
160 QTableWidgetItemPrivate *d;
161 Qt::ItemFlags itemFlags;
162};
163
164inline void QTableWidgetItem::setText(const QString &atext)
165{ setData(Qt::DisplayRole, atext); }
166
167inline void QTableWidgetItem::setIcon(const QIcon &aicon)
168{ setData(Qt::DecorationRole, aicon); }
169
170inline void QTableWidgetItem::setStatusTip(const QString &astatusTip)
171{ setData(Qt::StatusTipRole, astatusTip); }
172
173#if QT_CONFIG(tooltip)
174inline void QTableWidgetItem::setToolTip(const QString &atoolTip)
175{ setData(Qt::ToolTipRole, atoolTip); }
176#endif
177
178#if QT_CONFIG(whatsthis)
179inline void QTableWidgetItem::setWhatsThis(const QString &awhatsThis)
180{ setData(Qt::WhatsThisRole, awhatsThis); }
181#endif
182
183inline void QTableWidgetItem::setFont(const QFont &afont)
184{ setData(Qt::FontRole, afont); }
185
186#ifndef QT_NO_DATASTREAM
187Q_WIDGETS_EXPORT QDataStream &operator>>(QDataStream &in, QTableWidgetItem &item);
188Q_WIDGETS_EXPORT QDataStream &operator<<(QDataStream &out, const QTableWidgetItem &item);
189#endif
190
192
193class Q_WIDGETS_EXPORT QTableWidget : public QTableView
194{
195 Q_OBJECT
196 Q_PROPERTY(int rowCount READ rowCount WRITE setRowCount)
197 Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount)
198#if QT_CONFIG(draganddrop)
199 Q_PROPERTY(Qt::DropActions supportedDragActions READ supportedDragActions WRITE setSupportedDragActions)
200#endif
201
202 friend class QTableModel;
203public:
204 explicit QTableWidget(QWidget *parent = nullptr);
205 QTableWidget(int rows, int columns, QWidget *parent = nullptr);
206 ~QTableWidget();
207
208 void setRowCount(int rows);
209 int rowCount() const;
210
211 void setColumnCount(int columns);
212 int columnCount() const;
213
214 int row(const QTableWidgetItem *item) const;
215 int column(const QTableWidgetItem *item) const;
216
217 QTableWidgetItem *item(int row, int column) const;
218 void setItem(int row, int column, QTableWidgetItem *item);
219 QTableWidgetItem *takeItem(int row, int column);
220 QList<QTableWidgetItem*> items(const QMimeData *data) const;
221 QModelIndex indexFromItem(const QTableWidgetItem *item) const;
222 QTableWidgetItem *itemFromIndex(const QModelIndex &index) const;
223
224 QTableWidgetItem *verticalHeaderItem(int row) const;
225 void setVerticalHeaderItem(int row, QTableWidgetItem *item);
226 QTableWidgetItem *takeVerticalHeaderItem(int row);
227
228 QTableWidgetItem *horizontalHeaderItem(int column) const;
229 void setHorizontalHeaderItem(int column, QTableWidgetItem *item);
230 QTableWidgetItem *takeHorizontalHeaderItem(int column);
231 void setVerticalHeaderLabels(const QStringList &labels);
232 void setHorizontalHeaderLabels(const QStringList &labels);
233
234 int currentRow() const;
235 int currentColumn() const;
236 QTableWidgetItem *currentItem() const;
237 void setCurrentItem(QTableWidgetItem *item);
238 void setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command);
239 void setCurrentCell(int row, int column);
240 void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command);
241
242 void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder);
243 void setSortingEnabled(bool enable);
244 bool isSortingEnabled() const;
245
246 void editItem(QTableWidgetItem *item);
247 void openPersistentEditor(QTableWidgetItem *item);
248 void closePersistentEditor(QTableWidgetItem *item);
249 using QAbstractItemView::isPersistentEditorOpen;
250 bool isPersistentEditorOpen(QTableWidgetItem *item) const;
251
252 QWidget *cellWidget(int row, int column) const;
253 void setCellWidget(int row, int column, QWidget *widget);
254 inline void removeCellWidget(int row, int column);
255
256 void setRangeSelected(const QTableWidgetSelectionRange &range, bool select);
257
258 QList<QTableWidgetSelectionRange> selectedRanges() const;
259 QList<QTableWidgetItem*> selectedItems() const;
260 QList<QTableWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags) const;
261
262 int visualRow(int logicalRow) const;
263 int visualColumn(int logicalColumn) const;
264
265 QTableWidgetItem *itemAt(const QPoint &p) const;
266 inline QTableWidgetItem *itemAt(int x, int y) const;
267 QRect visualItemRect(const QTableWidgetItem *item) const;
268
269 const QTableWidgetItem *itemPrototype() const;
270 void setItemPrototype(const QTableWidgetItem *item);
271
272#if QT_CONFIG(draganddrop)
273 Qt::DropActions supportedDragActions() const;
274 void setSupportedDragActions(Qt::DropActions actions);
275#endif
276
277public Q_SLOTS:
278 void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible);
279 void insertRow(int row);
280 void insertColumn(int column);
281 void removeRow(int row);
282 void removeColumn(int column);
283 void clear();
284 void clearContents();
285
286Q_SIGNALS:
287 void itemPressed(QTableWidgetItem *item);
288 void itemClicked(QTableWidgetItem *item);
289 void itemDoubleClicked(QTableWidgetItem *item);
290
291 void itemActivated(QTableWidgetItem *item);
292 void itemEntered(QTableWidgetItem *item);
293 void itemChanged(QTableWidgetItem *item);
294
295 void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous);
296 void itemSelectionChanged();
297
298 void cellPressed(int row, int column);
299 void cellClicked(int row, int column);
300 void cellDoubleClicked(int row, int column);
301
302 void cellActivated(int row, int column);
303 void cellEntered(int row, int column);
304 void cellChanged(int row, int column);
305
306 void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);
307
308protected:
309 bool event(QEvent *e) override;
310 virtual QStringList mimeTypes() const;
311 virtual QMimeData *mimeData(const QList<QTableWidgetItem *> &items) const;
312 virtual bool dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action);
313 virtual Qt::DropActions supportedDropActions() const;
314
315protected:
316#if QT_CONFIG(draganddrop)
317 void dropEvent(QDropEvent *event) override;
318#endif
319private:
320 void setModel(QAbstractItemModel *model) override;
321
322 Q_DECLARE_PRIVATE(QTableWidget)
323 Q_DISABLE_COPY(QTableWidget)
324};
325
326inline void QTableWidget::removeCellWidget(int arow, int acolumn)
327{ setCellWidget(arow, acolumn, nullptr); }
328
329inline QTableWidgetItem *QTableWidget::itemAt(int ax, int ay) const
330{ return itemAt(QPoint(ax, ay)); }
331
332inline int QTableWidgetItem::row() const
333{ return (view ? view->row(this) : -1); }
334
335inline int QTableWidgetItem::column() const
336{ return (view ? view->column(this) : -1); }
337
338QT_END_NAMESPACE
339
340#endif // QTABLEWIDGET_H
\inmodule QtCore\reentrant
Definition qdatastream.h:50
The QTableWidgetItem class provides an item for use with the QTableWidget class.
The QTableWidget class provides an item-based table view with a default model.
QT_REQUIRE_CONFIG(tablewidget)
QDataStream & operator<<(QDataStream &stream, const QImage &image)
[0]
Definition qimage.cpp:4006
QDataStream & operator>>(QDataStream &stream, QImage &image)
Definition qimage.cpp:4032