From 771b34fb0c62f8c1e982dbcf256bc90ddaba64b7 Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Sun, 6 Jan 2013 15:17:09 +0100 Subject: QSqlTableModel: fix dataChanged() index for removed edited row Last column index is columnCount() - 1 This change is not applicable to Qt 5. Task-number: QTBUG-28961 Change-Id: Ib962ab5f737bf9c216423ee9d0632757d33f3bd2 Reviewed-by: Andy Shaw Reviewed-by: Stephen Kelly --- src/sql/models/qsqltablemodel.cpp | 2 +- tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index c8b4770..1860435 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -909,7 +909,7 @@ void QSqlTableModel::revertRow(int row) d->editBuffer.clear(); int oldIndex = d->editIndex; d->editIndex = -1; - emit dataChanged(createIndex(oldIndex, 0), createIndex(oldIndex, columnCount())); + emit dataChanged(createIndex(oldIndex, 0), createIndex(oldIndex, columnCount() - 1)); } else if (d->insertIndex == row) { d->revertInsertedRow(); } diff --git a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp index 19ed8a0..3a39c37 100644 --- a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp +++ b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp @@ -700,9 +700,21 @@ void tst_QSqlTableModel::removeRow() QCOMPARE(model.rowCount(), 3); headerDataChangedSpy.clear(); + // QTBUG-28961 Model emits dataChanged() for reverted changes before refreshing query + // after deleting row. Make sure indices are correct. + QVERIFY(model.setData(model.index(1, 1), QString("kurt"))); + QCOMPARE(model.data(model.index(1, 1)).toString(), QString("kurt")); + QSignalSpy dataChangedSpy(&model, SIGNAL(dataChanged(QModelIndex, QModelIndex))); QVERIFY(model.removeRow(1)); QCOMPARE(headerDataChangedSpy.count(), 0); QCOMPARE(model.rowCount(), 2); + QCOMPARE(dataChangedSpy.count(), 1); + QModelIndex idxFirst = qvariant_cast(dataChangedSpy.at(0).at(0)); + QCOMPARE(idxFirst.row(), 1); + QCOMPARE(idxFirst.column(), 0); + QModelIndex idxLast = qvariant_cast(dataChangedSpy.at(0).at(1)); + QCOMPARE(idxLast.row(), 1); + QCOMPARE(idxLast.column(), model.columnCount() - 1); QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry")); QCOMPARE(model.data(model.index(1, 1)).toString(), QString("vohi")); -- cgit v0.12