From 71a1df5456ebe7070533b469434a964e7de5a5c7 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Thu, 3 May 2018 21:11:57 +0200 Subject: QTableWidget: fix handling of Qt::EditRole/DisplayRole in setItemData() QTableModel::setItemData() did not treat Qt::EditRole and Qt::DisplayRole as the same. This lead to inconsistencies between setItemData() and QTableWidgetItem::setData() [ChangeLog][QtWidgets][QTableWidget] Fix handling of Qt::EditRole and Qt::DisplayRole in setItemData(). Change-Id: I456f4c8e654de701dcd579236162b8aaa8ba1e53 Reviewed-by: Richard Moe Gustavsen --- src/widgets/itemviews/qtablewidget.cpp | 9 ++++++--- tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/widgets/itemviews/qtablewidget.cpp b/src/widgets/itemviews/qtablewidget.cpp index ee87aa1615..07b8d3484e 100644 --- a/src/widgets/itemviews/qtablewidget.cpp +++ b/src/widgets/itemviews/qtablewidget.cpp @@ -456,9 +456,12 @@ bool QTableModel::setItemData(const QModelIndex &index, const QMapview = nullptr; // prohibits item from calling itemChanged() QVector rolesVec; for (QMap::ConstIterator it = roles.constBegin(); it != roles.constEnd(); ++it) { - if (itm->data(it.key()) != it.value()) { - itm->setData(it.key(), it.value()); - rolesVec += it.key(); + const int role = (it.key() == Qt::EditRole ? Qt::DisplayRole : it.key()); + if (itm->data(role) != it.value()) { + itm->setData(role, it.value()); + rolesVec += role; + if (role == Qt::DisplayRole) + rolesVec += Qt::EditRole; } } itm->view = view; diff --git a/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp b/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp index 3af31267c2..012ffb1a36 100644 --- a/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp +++ b/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp @@ -1381,7 +1381,7 @@ void tst_QTableWidget::itemData() void tst_QTableWidget::setItemData() { - QTableWidget table(10, 10); + QTableWidgetDataChanged table(10, 10); table.setSortingEnabled(false); QSignalSpy dataChangedSpy(table.model(), SIGNAL(dataChanged(QModelIndex,QModelIndex))); @@ -1394,6 +1394,7 @@ void tst_QTableWidget::setItemData() data.insert(Qt::DisplayRole, QLatin1String("Display")); data.insert(Qt::ToolTipRole, QLatin1String("ToolTip")); table.model()->setItemData(idx, data); + QCOMPARE(table.currentRoles, QVector({Qt::DisplayRole, Qt::EditRole, Qt::ToolTipRole})); QCOMPARE(table.model()->data(idx, Qt::DisplayRole).toString(), QLatin1String("Display")); QCOMPARE(table.model()->data(idx, Qt::ToolTipRole).toString(), QLatin1String("ToolTip")); -- cgit v1.2.3