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
qtreewidget.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 QTREEWIDGET_H
6#define QTREEWIDGET_H
7
8#include <QtWidgets/qtreeview.h>
9#include <QtWidgets/qtreewidgetitemiterator.h>
10#include <QtWidgets/qtwidgetsglobal.h>
11#include <QtCore/qlist.h>
12#include <QtCore/qvariant.h>
13
15
16QT_BEGIN_NAMESPACE
17
18class QTreeWidget;
19class QTreeModel;
20class QWidgetItemData;
22
23class Q_WIDGETS_EXPORT QTreeWidgetItem
24{
25 friend class QTreeModel;
26 friend class QTreeWidget;
27 friend class QTreeWidgetPrivate;
28 friend class QTreeWidgetItemIterator;
29 friend class QTreeWidgetItemPrivate;
30public:
31 enum ItemType { Type = 0, UserType = 1000 };
32 explicit QTreeWidgetItem(int type = Type);
33 explicit QTreeWidgetItem(const QStringList &strings, int type = Type);
34 explicit QTreeWidgetItem(QTreeWidget *treeview, int type = Type);
35 QTreeWidgetItem(QTreeWidget *treeview, const QStringList &strings, int type = Type);
36 QTreeWidgetItem(QTreeWidget *treeview, QTreeWidgetItem *after, int type = Type);
37 explicit QTreeWidgetItem(QTreeWidgetItem *parent, int type = Type);
38 QTreeWidgetItem(QTreeWidgetItem *parent, const QStringList &strings, int type = Type);
39 QTreeWidgetItem(QTreeWidgetItem *parent, QTreeWidgetItem *after, int type = Type);
40 QTreeWidgetItem(const QTreeWidgetItem &other);
41 virtual ~QTreeWidgetItem();
42
43 virtual QTreeWidgetItem *clone() const;
44
45 inline QTreeWidget *treeWidget() const { return view; }
46
47 void setSelected(bool select);
48 bool isSelected() const;
49
50 void setHidden(bool hide);
51 bool isHidden() const;
52
53 void setExpanded(bool expand);
54 bool isExpanded() const;
55
56 void setFirstColumnSpanned(bool span);
57 bool isFirstColumnSpanned() const;
58
59 inline void setDisabled(bool disabled);
60 inline bool isDisabled() const;
61
62 enum ChildIndicatorPolicy { ShowIndicator, DontShowIndicator, DontShowIndicatorWhenChildless };
63 void setChildIndicatorPolicy(QTreeWidgetItem::ChildIndicatorPolicy policy);
64 QTreeWidgetItem::ChildIndicatorPolicy childIndicatorPolicy() const;
65
66 Qt::ItemFlags flags() const;
67 void setFlags(Qt::ItemFlags flags);
68
69 inline QString text(int column) const
70 { return data(column, Qt::DisplayRole).toString(); }
71 inline void setText(int column, const QString &text);
72
73 inline QIcon icon(int column) const
74 { return qvariant_cast<QIcon>(data(column, Qt::DecorationRole)); }
75 inline void setIcon(int column, const QIcon &icon);
76
77 inline QString statusTip(int column) const
78 { return data(column, Qt::StatusTipRole).toString(); }
79 inline void setStatusTip(int column, const QString &statusTip);
80
81#if QT_CONFIG(tooltip)
82 inline QString toolTip(int column) const
83 { return data(column, Qt::ToolTipRole).toString(); }
84 inline void setToolTip(int column, const QString &toolTip);
85#endif
86
87#if QT_CONFIG(whatsthis)
88 inline QString whatsThis(int column) const
89 { return data(column, Qt::WhatsThisRole).toString(); }
90 inline void setWhatsThis(int column, const QString &whatsThis);
91#endif
92
93 inline QFont font(int column) const
94 { return qvariant_cast<QFont>(data(column, Qt::FontRole)); }
95 inline void setFont(int column, const QFont &font);
96
97#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
98 inline int textAlignment(int column) const
99 { return data(column, Qt::TextAlignmentRole).toInt(); }
100#else
101 inline Qt::Alignment textAlignment(int column) const
102 { return qvariant_cast<Qt::Alignment>(data(column, Qt::TextAlignmentRole)); }
103#endif
104#if QT_DEPRECATED_SINCE(6, 4)
105 QT_DEPRECATED_VERSION_X_6_4("Use the overload taking Qt::Alignment")
106 inline void setTextAlignment(int column, int alignment)
107 { setData(column, Qt::TextAlignmentRole, alignment); }
108 inline void setTextAlignment(int column, Qt::AlignmentFlag alignment)
109 { setData(column, Qt::TextAlignmentRole, QVariant::fromValue(Qt::Alignment(alignment))); }
110#endif
111 inline void setTextAlignment(int column, Qt::Alignment alignment)
112 { setData(column, Qt::TextAlignmentRole, QVariant::fromValue(alignment)); }
113
114 inline QBrush background(int column) const
115 { return qvariant_cast<QBrush>(data(column, Qt::BackgroundRole)); }
116 inline void setBackground(int column, const QBrush &brush)
117 { setData(column, Qt::BackgroundRole, brush.style() != Qt::NoBrush ? QVariant(brush) : QVariant()); }
118
119 inline QBrush foreground(int column) const
120 { return qvariant_cast<QBrush>(data(column, Qt::ForegroundRole)); }
121 inline void setForeground(int column, const QBrush &brush)
122 { setData(column, Qt::ForegroundRole, brush.style() != Qt::NoBrush ? QVariant(brush) : QVariant()); }
123
124 inline Qt::CheckState checkState(int column) const
125 { return qvariant_cast<Qt::CheckState>(data(column, Qt::CheckStateRole)); }
126 inline void setCheckState(int column, Qt::CheckState state)
127 { setData(column, Qt::CheckStateRole, state); }
128
129 inline QSize sizeHint(int column) const
130 { return qvariant_cast<QSize>(data(column, Qt::SizeHintRole)); }
131 inline void setSizeHint(int column, const QSize &size)
132 { setData(column, Qt::SizeHintRole, size.isValid() ? QVariant(size) : QVariant()); }
133
134 virtual QVariant data(int column, int role) const;
135 virtual void setData(int column, int role, const QVariant &value);
136
137 virtual bool operator<(const QTreeWidgetItem &other) const;
138
139#ifndef QT_NO_DATASTREAM
140 virtual void read(QDataStream &in);
141 virtual void write(QDataStream &out) const;
142#endif
143 QTreeWidgetItem &operator=(const QTreeWidgetItem &other);
144
145 inline QTreeWidgetItem *parent() const { return par; }
146 inline QTreeWidgetItem *child(int index) const {
147 if (index < 0 || index >= children.size())
148 return nullptr;
149 executePendingSort();
150 return children.at(index);
151 }
152 inline int childCount() const { return int(children.size()); }
153 inline int columnCount() const { return int(values.size()); }
154 inline int indexOfChild(QTreeWidgetItem *child) const;
155
156 void addChild(QTreeWidgetItem *child);
157 void insertChild(int index, QTreeWidgetItem *child);
158 void removeChild(QTreeWidgetItem *child);
159 QTreeWidgetItem *takeChild(int index);
160
161 void addChildren(const QList<QTreeWidgetItem*> &children);
162 void insertChildren(int index, const QList<QTreeWidgetItem*> &children);
163 QList<QTreeWidgetItem*> takeChildren();
164
165 inline int type() const { return rtti; }
166 inline void sortChildren(int column, Qt::SortOrder order)
167 { sortChildren(column, order, false); }
168
169protected:
170 void emitDataChanged();
171
172private:
173 void sortChildren(int column, Qt::SortOrder order, bool climb);
174 QVariant childrenCheckState(int column) const;
175 void itemChanged();
176 void executePendingSort() const;
177 QTreeModel *treeModel(QTreeWidget *v = nullptr) const;
178
179 int rtti;
180 // One item has a vector of column entries. Each column has a vector of (role, value) pairs.
181 QList<QList<QWidgetItemData>> values;
182 QTreeWidget *view = nullptr;
183 QTreeWidgetItemPrivate *d;
184 QTreeWidgetItem *par = nullptr;
185 // ### Qt7: Move children to d-pointer and replace QList by a suitable data structure.
186 // to fix QTBUG-94546
187 QList<QTreeWidgetItem*> children;
188 Qt::ItemFlags itemFlags = Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled
189 | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
190};
191
192inline void QTreeWidgetItem::setText(int column, const QString &atext)
193{ setData(column, Qt::DisplayRole, atext); }
194
195inline void QTreeWidgetItem::setIcon(int column, const QIcon &aicon)
196{ setData(column, Qt::DecorationRole, aicon); }
197
198#if QT_CONFIG(statustip)
199inline void QTreeWidgetItem::setStatusTip(int column, const QString &astatusTip)
200{ setData(column, Qt::StatusTipRole, astatusTip); }
201#endif
202
203#if QT_CONFIG(tooltip)
204inline void QTreeWidgetItem::setToolTip(int column, const QString &atoolTip)
205{ setData(column, Qt::ToolTipRole, atoolTip); }
206#endif
207
208#if QT_CONFIG(whatsthis)
209inline void QTreeWidgetItem::setWhatsThis(int column, const QString &awhatsThis)
210{ setData(column, Qt::WhatsThisRole, awhatsThis); }
211#endif
212
213inline void QTreeWidgetItem::setFont(int column, const QFont &afont)
214{ setData(column, Qt::FontRole, afont); }
215
216inline int QTreeWidgetItem::indexOfChild(QTreeWidgetItem *achild) const
217{ executePendingSort(); return int(children.indexOf(achild)); }
218
219#ifndef QT_NO_DATASTREAM
220Q_WIDGETS_EXPORT QDataStream &operator<<(QDataStream &out, const QTreeWidgetItem &item);
221Q_WIDGETS_EXPORT QDataStream &operator>>(QDataStream &in, QTreeWidgetItem &item);
222#endif
223
225
226class Q_WIDGETS_EXPORT QTreeWidget : public QTreeView
227{
228 Q_OBJECT
229 Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount)
230 Q_PROPERTY(int topLevelItemCount READ topLevelItemCount)
231#if QT_CONFIG(draganddrop)
232 Q_PROPERTY(Qt::DropActions supportedDragActions READ supportedDragActions WRITE setSupportedDragActions)
233#endif
234
235 friend class QTreeModel;
236 friend class QTreeWidgetItem;
237public:
238 explicit QTreeWidget(QWidget *parent = nullptr);
239 ~QTreeWidget();
240
241 int columnCount() const;
242 void setColumnCount(int columns);
243
244 QTreeWidgetItem *invisibleRootItem() const;
245 QTreeWidgetItem *topLevelItem(int index) const;
246 int topLevelItemCount() const;
247 void insertTopLevelItem(int index, QTreeWidgetItem *item);
248 void addTopLevelItem(QTreeWidgetItem *item);
249 QTreeWidgetItem *takeTopLevelItem(int index);
250 int indexOfTopLevelItem(QTreeWidgetItem *item) const;
251
252 void insertTopLevelItems(int index, const QList<QTreeWidgetItem*> &items);
253 void addTopLevelItems(const QList<QTreeWidgetItem*> &items);
254
255 QTreeWidgetItem *headerItem() const;
256 void setHeaderItem(QTreeWidgetItem *item);
257 void setHeaderLabels(const QStringList &labels);
258 inline void setHeaderLabel(const QString &label);
259
260 QTreeWidgetItem *currentItem() const;
261 int currentColumn() const;
262 void setCurrentItem(QTreeWidgetItem *item);
263 void setCurrentItem(QTreeWidgetItem *item, int column);
264 void setCurrentItem(QTreeWidgetItem *item, int column, QItemSelectionModel::SelectionFlags command);
265
266 QTreeWidgetItem *itemAt(const QPoint &p) const;
267 inline QTreeWidgetItem *itemAt(int x, int y) const;
268 QRect visualItemRect(const QTreeWidgetItem *item) const;
269
270 int sortColumn() const;
271 void sortItems(int column, Qt::SortOrder order);
272
273 void editItem(QTreeWidgetItem *item, int column = 0);
274 void openPersistentEditor(QTreeWidgetItem *item, int column = 0);
275 void closePersistentEditor(QTreeWidgetItem *item, int column = 0);
276 using QAbstractItemView::isPersistentEditorOpen;
277 bool isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const;
278
279 QWidget *itemWidget(QTreeWidgetItem *item, int column) const;
280 void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget);
281 inline void removeItemWidget(QTreeWidgetItem *item, int column);
282
283 QList<QTreeWidgetItem*> selectedItems() const;
284 QList<QTreeWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags,
285 int column = 0) const;
286
287 QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const;
288 QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const;
289
290 QModelIndex indexFromItem(const QTreeWidgetItem *item, int column = 0) const;
291 QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const;
292
293 void setSelectionModel(QItemSelectionModel *selectionModel) override;
294
295#if QT_CONFIG(draganddrop)
296 Qt::DropActions supportedDragActions() const;
297 void setSupportedDragActions(Qt::DropActions actions);
298#endif
299
300public Q_SLOTS:
301 void scrollToItem(const QTreeWidgetItem *item,
302 QAbstractItemView::ScrollHint hint = EnsureVisible);
303 void expandItem(const QTreeWidgetItem *item);
304 void collapseItem(const QTreeWidgetItem *item);
305 void clear();
306
307Q_SIGNALS:
308 void itemPressed(QTreeWidgetItem *item, int column);
309 void itemClicked(QTreeWidgetItem *item, int column);
310 void itemDoubleClicked(QTreeWidgetItem *item, int column);
311 void itemActivated(QTreeWidgetItem *item, int column);
312 void itemEntered(QTreeWidgetItem *item, int column);
313 void itemChanged(QTreeWidgetItem *item, int column);
314 void itemExpanded(QTreeWidgetItem *item);
315 void itemCollapsed(QTreeWidgetItem *item);
316 void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
317 void itemSelectionChanged();
318
319protected:
320 bool event(QEvent *e) override;
321 virtual QStringList mimeTypes() const;
322 virtual QMimeData *mimeData(const QList<QTreeWidgetItem *> &items) const;
323 virtual bool dropMimeData(QTreeWidgetItem *parent, int index,
324 const QMimeData *data, Qt::DropAction action);
325 virtual Qt::DropActions supportedDropActions() const;
326
327#if QT_CONFIG(draganddrop)
328 void dropEvent(QDropEvent *event) override;
329#endif
330private:
331 void setModel(QAbstractItemModel *model) override;
332
333 Q_DECLARE_PRIVATE(QTreeWidget)
334 Q_DISABLE_COPY(QTreeWidget)
335};
336
337inline void QTreeWidget::removeItemWidget(QTreeWidgetItem *item, int column)
338{ setItemWidget(item, column, nullptr); }
339
340inline QTreeWidgetItem *QTreeWidget::itemAt(int ax, int ay) const
341{ return itemAt(QPoint(ax, ay)); }
342
343inline void QTreeWidget::setHeaderLabel(const QString &alabel)
344{ setHeaderLabels(QStringList(alabel)); }
345
346inline void QTreeWidgetItem::setDisabled(bool disabled)
347{ setFlags(disabled ? (flags() & ~Qt::ItemIsEnabled) : flags() | Qt::ItemIsEnabled); }
348
349inline bool QTreeWidgetItem::isDisabled() const
350{ return !(flags() & Qt::ItemIsEnabled); }
351
352QT_END_NAMESPACE
353
354#endif // QTREEWIDGET_H
\inmodule QtCore\reentrant
Definition qdatastream.h:50
bool operator()(QTreeWidgetItem *i1, QTreeWidgetItem *i2) const
The QTreeWidgetItem class provides an item for use with the QTreeWidget convenience class.
Definition qtreewidget.h:24
The QTreeWidget class provides a tree view that uses a predefined tree model.
QT_REQUIRE_CONFIG(treewidget)
QDataStream & operator<<(QDataStream &stream, const QImage &image)
[0]
Definition qimage.cpp:4006
QDataStream & operator>>(QDataStream &stream, QImage &image)
Definition qimage.cpp:4032