diff options
Diffstat (limited to 'src/widgets/itemviews/qtablewidget.cpp')
-rw-r--r-- | src/widgets/itemviews/qtablewidget.cpp | 88 |
1 files changed, 51 insertions, 37 deletions
diff --git a/src/widgets/itemviews/qtablewidget.cpp b/src/widgets/itemviews/qtablewidget.cpp index 67886be94f..6dd812f6fb 100644 --- a/src/widgets/itemviews/qtablewidget.cpp +++ b/src/widgets/itemviews/qtablewidget.cpp @@ -3,7 +3,6 @@ #include "qtablewidget.h" -#include <qitemdelegate.h> #include <qpainter.h> #include <private/qtablewidget_p.h> @@ -248,7 +247,7 @@ void QTableModel::setHorizontalHeaderItem(int section, QTableWidgetItem *item) if (item) { item->view = view; - item->itemFlags = Qt::ItemFlags(int(item->itemFlags)|ItemIsHeaderItem); + item->d->headerItem = true; } horizontalHeaderItems[section] = item; emit headerDataChanged(Qt::Horizontal, section, section); @@ -270,7 +269,7 @@ void QTableModel::setVerticalHeaderItem(int section, QTableWidgetItem *item) if (item) { item->view = view; - item->itemFlags = Qt::ItemFlags(int(item->itemFlags)|ItemIsHeaderItem); + item->d->headerItem = true; } verticalHeaderItems[section] = item; emit headerDataChanged(Qt::Vertical, section, section); @@ -283,7 +282,7 @@ QTableWidgetItem *QTableModel::takeHorizontalHeaderItem(int section) QTableWidgetItem *itm = horizontalHeaderItems.at(section); if (itm) { itm->view = nullptr; - itm->itemFlags &= ~ItemIsHeaderItem; + itm->d->headerItem = false; horizontalHeaderItems[section] = 0; } return itm; @@ -296,7 +295,7 @@ QTableWidgetItem *QTableModel::takeVerticalHeaderItem(int section) QTableWidgetItem *itm = verticalHeaderItems.at(section); if (itm) { itm->view = nullptr; - itm->itemFlags &= ~ItemIsHeaderItem; + itm->d->headerItem = false; verticalHeaderItems[section] = 0; } return itm; @@ -761,7 +760,7 @@ void QTableModel::itemChanged(QTableWidgetItem *item, const QList<int> &roles) { if (!item) return; - if (item->flags() & ItemIsHeaderItem) { + if (item->d->headerItem) { int row = verticalHeaderItems.indexOf(item); if (row >= 0) { emit headerDataChanged(Qt::Vertical, row, row); @@ -1592,28 +1591,41 @@ 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())); -} - -void QTableWidgetPrivate::_q_emitItemPressed(const QModelIndex &index) + connections = { + // view signals + QObjectPrivate::connect(q, &QTableWidget::pressed, + this, &QTableWidgetPrivate::emitItemPressed), + QObjectPrivate::connect(q, &QTableWidget::clicked, + this, &QTableWidgetPrivate::emitItemClicked), + QObjectPrivate::connect(q, &QTableWidget::doubleClicked, + this, &QTableWidgetPrivate::emitItemDoubleClicked), + QObjectPrivate::connect(q, &QTableWidget::activated, + this, &QTableWidgetPrivate::emitItemActivated), + QObjectPrivate::connect(q, &QTableWidget::entered, + this, &QTableWidgetPrivate::emitItemEntered), + // model signals + QObjectPrivate::connect(model, &QAbstractItemModel::dataChanged, + this, &QTableWidgetPrivate::emitItemChanged), + // selection signals + QObjectPrivate::connect(q->selectionModel(), &QItemSelectionModel::currentChanged, + this, &QTableWidgetPrivate::emitCurrentItemChanged), + QObject::connect(q->selectionModel(), &QItemSelectionModel::selectionChanged, + q, &QTableWidget::itemSelectionChanged), + // sorting + QObjectPrivate::connect(model, &QAbstractItemModel::dataChanged, + this, &QTableWidgetPrivate::dataChanged), + QObjectPrivate::connect(model, &QAbstractItemModel::columnsRemoved, + this, &QTableWidgetPrivate::sort) + }; +} + +void QTableWidgetPrivate::clearConnections() +{ + for (const QMetaObject::Connection &connection : connections) + QObject::disconnect(connection); +} + +void QTableWidgetPrivate::emitItemPressed(const QModelIndex &index) { Q_Q(QTableWidget); if (QTableWidgetItem *item = tableModel()->item(index)) @@ -1621,7 +1633,7 @@ void QTableWidgetPrivate::_q_emitItemPressed(const QModelIndex &index) emit q->cellPressed(index.row(), index.column()); } -void QTableWidgetPrivate::_q_emitItemClicked(const QModelIndex &index) +void QTableWidgetPrivate::emitItemClicked(const QModelIndex &index) { Q_Q(QTableWidget); if (QTableWidgetItem *item = tableModel()->item(index)) @@ -1629,7 +1641,7 @@ void QTableWidgetPrivate::_q_emitItemClicked(const QModelIndex &index) emit q->cellClicked(index.row(), index.column()); } -void QTableWidgetPrivate::_q_emitItemDoubleClicked(const QModelIndex &index) +void QTableWidgetPrivate::emitItemDoubleClicked(const QModelIndex &index) { Q_Q(QTableWidget); if (QTableWidgetItem *item = tableModel()->item(index)) @@ -1637,7 +1649,7 @@ void QTableWidgetPrivate::_q_emitItemDoubleClicked(const QModelIndex &index) emit q->cellDoubleClicked(index.row(), index.column()); } -void QTableWidgetPrivate::_q_emitItemActivated(const QModelIndex &index) +void QTableWidgetPrivate::emitItemActivated(const QModelIndex &index) { Q_Q(QTableWidget); if (QTableWidgetItem *item = tableModel()->item(index)) @@ -1645,7 +1657,7 @@ void QTableWidgetPrivate::_q_emitItemActivated(const QModelIndex &index) emit q->cellActivated(index.row(), index.column()); } -void QTableWidgetPrivate::_q_emitItemEntered(const QModelIndex &index) +void QTableWidgetPrivate::emitItemEntered(const QModelIndex &index) { Q_Q(QTableWidget); if (QTableWidgetItem *item = tableModel()->item(index)) @@ -1653,7 +1665,7 @@ void QTableWidgetPrivate::_q_emitItemEntered(const QModelIndex &index) emit q->cellEntered(index.row(), index.column()); } -void QTableWidgetPrivate::_q_emitItemChanged(const QModelIndex &index) +void QTableWidgetPrivate::emitItemChanged(const QModelIndex &index) { Q_Q(QTableWidget); if (QTableWidgetItem *item = tableModel()->item(index)) @@ -1661,7 +1673,7 @@ void QTableWidgetPrivate::_q_emitItemChanged(const QModelIndex &index) emit q->cellChanged(index.row(), index.column()); } -void QTableWidgetPrivate::_q_emitCurrentItemChanged(const QModelIndex ¤t, +void QTableWidgetPrivate::emitCurrentItemChanged(const QModelIndex ¤t, const QModelIndex &previous) { Q_Q(QTableWidget); @@ -1672,7 +1684,7 @@ void QTableWidgetPrivate::_q_emitCurrentItemChanged(const QModelIndex ¤t, emit q->currentCellChanged(current.row(), current.column(), previous.row(), previous.column()); } -void QTableWidgetPrivate::_q_sort() +void QTableWidgetPrivate::sort() { if (sortingEnabled) { int column = horizontalHeader->sortIndicatorSection(); @@ -1681,8 +1693,8 @@ void QTableWidgetPrivate::_q_sort() } } -void QTableWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft, - const QModelIndex &bottomRight) +void QTableWidgetPrivate::dataChanged(const QModelIndex &topLeft, + const QModelIndex &bottomRight) { if (sortingEnabled && topLeft.isValid() && bottomRight.isValid()) { int column = horizontalHeader->sortIndicatorSection(); @@ -1880,6 +1892,8 @@ QTableWidget::QTableWidget(int rows, int columns, QWidget *parent) */ QTableWidget::~QTableWidget() { + Q_D(QTableWidget); + d->clearConnections(); } /*! |