17#include <QtWidgets/private/qtwidgetsglobal_p.h>
18#include <QtCore/qabstractitemmodel.h>
19#include <private/qabstractitemmodel_p.h>
20#include <QtCore/qbasictimer.h>
21#include <QtWidgets/qtreewidget.h>
22#include <private/qtreeview_p.h>
23#include <QtWidgets/qheaderview.h>
32class QTreeWidgetItemIterator;
40 friend class QTreeWidgetItem;
42 friend class QTreeWidgetItemIterator;
43 friend class QTreeWidgetItemIteratorPrivate;
46 explicit QTreeModel(
int columns = 0, QTreeWidget *parent =
nullptr);
49 inline QTreeWidget *
view()
const
50 {
return qobject_cast<QTreeWidget*>(QObject::parent()); }
55 QTreeWidgetItem *
item(
const QModelIndex &index)
const;
59 QModelIndex index(
int row,
int column,
const QModelIndex &parent)
const override;
61 int rowCount(
const QModelIndex &parent)
const override;
62 int columnCount(
const QModelIndex &parent = QModelIndex())
const override;
63 bool hasChildren(
const QModelIndex &parent)
const override;
66 bool setData(
const QModelIndex &index,
const QVariant &value,
int role)
override;
70 QVariant headerData(
int section, Qt::Orientation orientation,
int role)
const override;
71 bool setHeaderData(
int section, Qt::Orientation orientation,
const QVariant &value,
76 void sort(
int column, Qt::SortOrder order)
override;
78 int start,
int end,
const QModelIndex &parent);
80 const std::pair<QTreeWidgetItem*,
int> &right);
82 const std::pair<QTreeWidgetItem*,
int> &right);
84 const QList<QTreeWidgetItem*>::iterator &begin,
85 const QList<QTreeWidgetItem*>::iterator &end,
86 Qt::SortOrder order, QTreeWidgetItem *item);
88 bool insertRows(
int row,
int count,
const QModelIndex &)
override;
89 bool insertColumns(
int column,
int count,
const QModelIndex &)
override;
91 bool removeRows(
int row,
int count,
const QModelIndex &parent = QModelIndex())
override;
96 bool dropMimeData(
const QMimeData *data, Qt::DropAction action,
97 int row,
int column,
const QModelIndex &parent)
override;
104 {
return createIndex(row, col, item); }
108 void emitDataChanged(QTreeWidgetItem *item,
int column,
const QList<
int> &roles);
113 void sortItems(QList<QTreeWidgetItem*> *items,
int column, Qt::SortOrder order);
117 QTreeWidgetItem *rootItem;
118 QTreeWidgetItem *headerItem;
120 mutable QModelIndexList cachedIndexes;
121 QList<QTreeWidgetItemIterator*> iterators;
123 mutable QBasicTimer sortPendingTimer;
124 mutable bool skipPendingSort =
false;
125 bool inline executePendingSort()
const;
127 bool isChanging()
const;
140 friend struct SkipSorting;
143QT_BEGIN_INCLUDE_NAMESPACE
144#include "private/qabstractitemmodel_p.h"
145QT_END_INCLUDE_NAMESPACE
149 Q_DECLARE_PUBLIC(QTreeModel)
161 void sortChildren(
int column, Qt::SortOrder order,
bool climb);
172inline bool QTreeModel::executePendingSort()
const
174 if (!skipPendingSort && sortPendingTimer.isActive() && !isChanging()) {
175 sortPendingTimer.stop();
176 int column =
view()->header()->sortIndicatorSection();
177 Qt::SortOrder order =
view()->header()->sortIndicatorOrder();
179 that->sort(column, order);
188 Q_DECLARE_PUBLIC(QTreeWidget)
195 inline QTreeWidgetItem *
item(
const QModelIndex &index)
const
207 void dataChanged(
const QModelIndex &topLeft,
const QModelIndex &bottomRight);
208 void selectionChanged(
const QItemSelection &selected,
const QItemSelection &deselected);
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role) override
QModelIndex parent(const QModelIndex &child) const override
void ensureSorted(int column, Qt::SortOrder order, int start, int end, const QModelIndex &parent)
int rowCount(const QModelIndex &parent) const override
bool setData(const QModelIndex &index, const QVariant &value, int role) override
bool insertColumns(int column, int count, const QModelIndex &) override
static bool itemGreaterThan(const std::pair< QTreeWidgetItem *, int > &left, const std::pair< QTreeWidgetItem *, int > &right)
QTreeWidget * view() const
void emitDataChanged(QTreeWidgetItem *item, int column, const QList< int > &roles)
bool removeRows(int row, int count, const QModelIndex &parent=QModelIndex()) override
Qt::DropActions supportedDragActions() const override
Returns the actions supported by the data in this model.
void itemChanged(QTreeWidgetItem *item)
void setColumnCount(int columns)
bool insertRows(int row, int count, const QModelIndex &) override
void sortItems(QList< QTreeWidgetItem * > *items, int column, Qt::SortOrder order)
QMimeData * internalMimeData() const
QTreeModel(QTreeModelPrivate &, QTreeWidget *parent=nullptr)
QTreeWidgetItem * item(const QModelIndex &index) const
Qt::DropActions supportedDropActions() const override
QMimeData * mimeData(const QModelIndexList &indexes) const override
Returns an object that contains serialized items of data corresponding to the list of indexes specifi...
QTreeModel(int columns=0, QTreeWidget *parent=nullptr)
int columnCount(const QModelIndex &parent=QModelIndex()) const override
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
void sort(int column, Qt::SortOrder order) override
QModelIndex createIndexFromItem(int row, int col, QTreeWidgetItem *item) const
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
Qt::ItemFlags flags(const QModelIndex &index) const override
\reimp
QModelIndex index(int row, int column, const QModelIndex &parent) const override
bool clearItemData(const QModelIndex &index) override
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
Handles the data supplied by a drag and drop operation that ended with the given action.
static QList< QTreeWidgetItem * >::iterator sortedInsertionIterator(const QList< QTreeWidgetItem * >::iterator &begin, const QList< QTreeWidgetItem * >::iterator &end, Qt::SortOrder order, QTreeWidgetItem *item)
QStringList mimeTypes() const override
Returns the list of allowed MIME types.
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.
QModelIndex index(const QTreeWidgetItem *item, int column) const
bool hasChildren(const QModelIndex &parent) const override
Returns {true} if parent has any children; otherwise returns {false}.
void timerEvent(QTimerEvent *) override
This event handler can be reimplemented in a subclass to receive timer events for the object.
void beginRemoveItems(QTreeWidgetItem *parent, int row, int count)
void beginInsertItems(QTreeWidgetItem *parent, int row, int count)
static bool itemLessThan(const std::pair< QTreeWidgetItem *, int > &left, const std::pair< QTreeWidgetItem *, int > &right)
Combined button and popup list for selecting options.