diff options
author | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2023-09-24 19:42:59 +0200 |
---|---|---|
committer | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2023-10-01 17:10:19 +0200 |
commit | 2666c773bacc99fd6e003d5cb9595c7bd09cd351 (patch) | |
tree | 74ec81df0fd1c65be060aa03a3e8e52bb6b1ed44 | |
parent | c55a7e4167c3174120f1fb32c7e7d1756cc3960d (diff) |
Widgets/Itemviews: use pmf-style connect in QTableWidget
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: I2b5bb99c77e6e783a4cd7b0065d2f52a0266d88b
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
-rw-r--r-- | src/widgets/itemviews/qtablewidget.cpp | 53 | ||||
-rw-r--r-- | src/widgets/itemviews/qtablewidget_p.h | 5 |
2 files changed, 39 insertions, 19 deletions
diff --git a/src/widgets/itemviews/qtablewidget.cpp b/src/widgets/itemviews/qtablewidget.cpp index f9d2c8d59c..857d64b3dd 100644 --- a/src/widgets/itemviews/qtablewidget.cpp +++ b/src/widgets/itemviews/qtablewidget.cpp @@ -1592,25 +1592,38 @@ QTableWidgetItem &QTableWidgetItem::operator=(const QTableWidgetItem &other) void QTableWidgetPrivate::setup() { Q_Q(QTableWidget); - // view signals - QObject::connect(q, SIGNAL(pressed(QModelIndex)), q, SLOT(_q_emitItemPressed(QModelIndex))); - QObject::connect(q, SIGNAL(clicked(QModelIndex)), q, SLOT(_q_emitItemClicked(QModelIndex))); - QObject::connect(q, SIGNAL(doubleClicked(QModelIndex)), - q, SLOT(_q_emitItemDoubleClicked(QModelIndex))); - QObject::connect(q, SIGNAL(activated(QModelIndex)), q, SLOT(_q_emitItemActivated(QModelIndex))); - QObject::connect(q, SIGNAL(entered(QModelIndex)), q, SLOT(_q_emitItemEntered(QModelIndex))); - // model signals - QObject::connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - q, SLOT(_q_emitItemChanged(QModelIndex))); - // selection signals - QObject::connect(q->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), - q, SLOT(_q_emitCurrentItemChanged(QModelIndex,QModelIndex))); - QObject::connect(q->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), - q, SIGNAL(itemSelectionChanged())); - // sorting - QObject::connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), - q, SLOT(_q_dataChanged(QModelIndex,QModelIndex))); - QObject::connect(model, SIGNAL(columnsRemoved(QModelIndex,int,int)), q, SLOT(_q_sort())); + connections = { + // view signals + QObjectPrivate::connect(q, &QTableWidget::pressed, + this, &QTableWidgetPrivate::_q_emitItemPressed), + QObjectPrivate::connect(q, &QTableWidget::clicked, + this, &QTableWidgetPrivate::_q_emitItemClicked), + QObjectPrivate::connect(q, &QTableWidget::doubleClicked, + this, &QTableWidgetPrivate::_q_emitItemDoubleClicked), + QObjectPrivate::connect(q, &QTableWidget::activated, + this, &QTableWidgetPrivate::_q_emitItemActivated), + QObjectPrivate::connect(q, &QTableWidget::entered, + this, &QTableWidgetPrivate::_q_emitItemEntered), + // model signals + QObjectPrivate::connect(model, &QAbstractItemModel::dataChanged, + this, &QTableWidgetPrivate::_q_emitItemChanged), + // selection signals + QObjectPrivate::connect(q->selectionModel(), &QItemSelectionModel::currentChanged, + this, &QTableWidgetPrivate::_q_emitCurrentItemChanged), + QObject::connect(q->selectionModel(), &QItemSelectionModel::selectionChanged, + q, &QTableWidget::itemSelectionChanged), + // sorting + QObjectPrivate::connect(model, &QAbstractItemModel::dataChanged, + this, &QTableWidgetPrivate::_q_dataChanged), + QObjectPrivate::connect(model, &QAbstractItemModel::columnsRemoved, + this, &QTableWidgetPrivate::_q_sort) + }; +} + +void QTableWidgetPrivate::clearConnections() +{ + for (const QMetaObject::Connection &connection : connections) + QObject::disconnect(connection); } void QTableWidgetPrivate::_q_emitItemPressed(const QModelIndex &index) @@ -1880,6 +1893,8 @@ QTableWidget::QTableWidget(int rows, int columns, QWidget *parent) */ QTableWidget::~QTableWidget() { + Q_D(QTableWidget); + d->clearConnections(); } /*! diff --git a/src/widgets/itemviews/qtablewidget_p.h b/src/widgets/itemviews/qtablewidget_p.h index 6bfa355edb..714aac6b7b 100644 --- a/src/widgets/itemviews/qtablewidget_p.h +++ b/src/widgets/itemviews/qtablewidget_p.h @@ -22,6 +22,8 @@ #include <private/qtableview_p.h> #include <private/qwidgetitemdata_p.h> +#include <array> + QT_REQUIRE_CONFIG(tablewidget); QT_BEGIN_NAMESPACE @@ -150,6 +152,7 @@ public: QTableWidgetPrivate() : QTableViewPrivate() {} inline QTableModel *tableModel() const { return qobject_cast<QTableModel*>(model); } void setup(); + void clearConnections(); // view signals void _q_emitItemPressed(const QModelIndex &index); @@ -164,6 +167,8 @@ public: // sorting void _q_sort(); void _q_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); + + std::array<QMetaObject::Connection, 10> connections; }; class QTableWidgetItemPrivate |