Widgets/Itemviews: use pmf-style connect in QTreeWidget
Replace all connect() calls with pmf-style connection syntax. This also means that we have to properly disconnect everything in the ctor to not trigger an assertion in QtPrivate::assertObjectType(). Task-number: QTBUG-117698 Change-Id: I652c8d6f27b23a7d4467dc39b7c12850f4d25f66 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>bb10
parent
0bb35ee2f0
commit
c55a7e4167
|
|
@ -2301,6 +2301,12 @@ QDataStream &operator>>(QDataStream &in, QTreeWidgetItem &item)
|
|||
#endif // QT_NO_DATASTREAM
|
||||
|
||||
|
||||
void QTreeWidgetPrivate::clearConnections()
|
||||
{
|
||||
for (const QMetaObject::Connection &connection : connections)
|
||||
QObject::disconnect(connection);
|
||||
}
|
||||
|
||||
void QTreeWidgetPrivate::_q_emitItemPressed(const QModelIndex &index)
|
||||
{
|
||||
Q_Q(QTreeWidget);
|
||||
|
|
@ -2570,31 +2576,34 @@ void QTreeWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft,
|
|||
QTreeWidget::QTreeWidget(QWidget *parent)
|
||||
: QTreeView(*new QTreeWidgetPrivate(), parent)
|
||||
{
|
||||
Q_D(QTreeWidget);
|
||||
QTreeView::setModel(new QTreeModel(1, this));
|
||||
connect(this, SIGNAL(pressed(QModelIndex)),
|
||||
SLOT(_q_emitItemPressed(QModelIndex)));
|
||||
connect(this, SIGNAL(clicked(QModelIndex)),
|
||||
SLOT(_q_emitItemClicked(QModelIndex)));
|
||||
connect(this, SIGNAL(doubleClicked(QModelIndex)),
|
||||
SLOT(_q_emitItemDoubleClicked(QModelIndex)));
|
||||
connect(this, SIGNAL(activated(QModelIndex)),
|
||||
SLOT(_q_emitItemActivated(QModelIndex)));
|
||||
connect(this, SIGNAL(entered(QModelIndex)),
|
||||
SLOT(_q_emitItemEntered(QModelIndex)));
|
||||
connect(this, SIGNAL(expanded(QModelIndex)),
|
||||
SLOT(_q_emitItemExpanded(QModelIndex)));
|
||||
connect(this, SIGNAL(collapsed(QModelIndex)),
|
||||
SLOT(_q_emitItemCollapsed(QModelIndex)));
|
||||
connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
|
||||
this, SLOT(_q_emitCurrentItemChanged(QModelIndex,QModelIndex)));
|
||||
connect(model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
|
||||
this, SLOT(_q_emitItemChanged(QModelIndex)));
|
||||
connect(model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
|
||||
this, SLOT(_q_dataChanged(QModelIndex,QModelIndex)));
|
||||
connect(model(), SIGNAL(columnsRemoved(QModelIndex,int,int)),
|
||||
this, SLOT(_q_sort()));
|
||||
connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
|
||||
this, SLOT(_q_selectionChanged(QItemSelection,QItemSelection)));
|
||||
d->connections = {
|
||||
QObjectPrivate::connect(this, &QTreeWidget::pressed,
|
||||
d, &QTreeWidgetPrivate::_q_emitItemPressed),
|
||||
QObjectPrivate::connect(this, &QTreeWidget::clicked,
|
||||
d, &QTreeWidgetPrivate::_q_emitItemClicked),
|
||||
QObjectPrivate::connect(this, &QTreeWidget::doubleClicked,
|
||||
d, &QTreeWidgetPrivate::_q_emitItemDoubleClicked),
|
||||
QObjectPrivate::connect(this, &QTreeWidget::activated,
|
||||
d, &QTreeWidgetPrivate::_q_emitItemActivated),
|
||||
QObjectPrivate::connect(this, &QTreeWidget::entered,
|
||||
d, &QTreeWidgetPrivate::_q_emitItemEntered),
|
||||
QObjectPrivate::connect(this, &QTreeWidget::expanded,
|
||||
d, &QTreeWidgetPrivate::_q_emitItemExpanded),
|
||||
QObjectPrivate::connect(this, &QTreeWidget::collapsed,
|
||||
d, &QTreeWidgetPrivate::_q_emitItemCollapsed),
|
||||
QObjectPrivate::connect(model(), &QAbstractItemModel::dataChanged,
|
||||
d, &QTreeWidgetPrivate::_q_emitItemChanged),
|
||||
QObjectPrivate::connect(model(), &QAbstractItemModel::dataChanged,
|
||||
d, &QTreeWidgetPrivate::_q_dataChanged),
|
||||
QObjectPrivate::connect(model(), &QAbstractItemModel::columnsRemoved,
|
||||
d, &QTreeWidgetPrivate::_q_sort),
|
||||
QObjectPrivate::connect(selectionModel(), &QItemSelectionModel::currentChanged,
|
||||
d, &QTreeWidgetPrivate::_q_emitCurrentItemChanged),
|
||||
QObjectPrivate::connect(selectionModel(), &QItemSelectionModel::selectionChanged,
|
||||
d, &QTreeWidgetPrivate::_q_selectionChanged)
|
||||
};
|
||||
header()->setSectionsClickable(false);
|
||||
}
|
||||
|
||||
|
|
@ -2604,6 +2613,8 @@ QTreeWidget::QTreeWidget(QWidget *parent)
|
|||
|
||||
QTreeWidget::~QTreeWidget()
|
||||
{
|
||||
Q_D(QTreeWidget);
|
||||
d->clearConnections();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@
|
|||
#include <private/qtreeview_p.h>
|
||||
#include <QtWidgets/qheaderview.h>
|
||||
|
||||
#include <array>
|
||||
|
||||
QT_REQUIRE_CONFIG(treewidget);
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
|
@ -186,6 +188,7 @@ class QTreeWidgetPrivate : public QTreeViewPrivate
|
|||
Q_DECLARE_PUBLIC(QTreeWidget)
|
||||
public:
|
||||
QTreeWidgetPrivate() : QTreeViewPrivate(), explicitSortColumn(-1) {}
|
||||
void clearConnections();
|
||||
inline QTreeModel *treeModel() const { return qobject_cast<QTreeModel*>(model); }
|
||||
inline QModelIndex index(const QTreeWidgetItem *item, int column = 0) const
|
||||
{ return treeModel()->index(item, column); }
|
||||
|
|
@ -206,6 +209,8 @@ public:
|
|||
|
||||
// used by QTreeWidgetItem::sortChildren to make sure the column argument is used
|
||||
int explicitSortColumn;
|
||||
|
||||
std::array<QMetaObject::Connection, 12> connections;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
|||
Loading…
Reference in New Issue