diff options
author | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2020-08-28 20:56:47 +0200 |
---|---|---|
committer | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2020-09-02 22:44:30 +0200 |
commit | 3ddffd2d8b619863930854705ca5577c0389d65f (patch) | |
tree | 6e26a6663565a1e6abf5e11d3089b5c7a2188abf /tests/auto | |
parent | 26b38510ce5a04ba564c3c281f7587d2fa034d4e (diff) |
QTable/TreeView: fix sortByColumn() when view is already sorted
When the view was already sorted by the column and order given to
sortByColumn(), a resort was not triggered which is a regression since
d0f909f8dbdd8594b0d950822f0e7ab8728da513.
Therefore don't rely on sortIndicatorChanged() in this case and trigger
an explicit sort as it's done when no user-triggered sorting is enabled
Fixes: QTBUG-86268
Change-Id: I3ec30ab81f304d5a19cef6d67b8a81c21b4a112d
Pick-to: 5.15
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp | 61 | ||||
-rw-r--r-- | tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp | 8 |
2 files changed, 69 insertions, 0 deletions
diff --git a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp index 74f480c318..37f37eaac8 100644 --- a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp +++ b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp @@ -384,6 +384,9 @@ private slots: void sortingEnabled_data(); void sortingEnabled(); + void sortByColumn_data(); + void sortByColumn(); + void scrollTo_data(); void scrollTo(); @@ -2681,6 +2684,64 @@ void tst_QTableView::sortingEnabled() // QFETCH(int, columnCount); } +void tst_QTableView::sortByColumn_data() +{ + QTest::addColumn<bool>("sortingEnabled"); + QTest::newRow("sorting enabled") << true; + QTest::newRow("sorting disabled") << false; +} + +// Checks sorting and that sortByColumn also sets the sortIndicator +void tst_QTableView::sortByColumn() +{ + QFETCH(bool, sortingEnabled); + QTableView view; + QStandardItemModel model(4, 2); + QSortFilterProxyModel sfpm; // default QStandardItemModel does not support 'unsorted' state + sfpm.setSourceModel(&model); + model.setItem(0, 0, new QStandardItem("b")); + model.setItem(1, 0, new QStandardItem("d")); + model.setItem(2, 0, new QStandardItem("c")); + model.setItem(3, 0, new QStandardItem("a")); + model.setItem(0, 1, new QStandardItem("e")); + model.setItem(1, 1, new QStandardItem("g")); + model.setItem(2, 1, new QStandardItem("h")); + model.setItem(3, 1, new QStandardItem("f")); + + view.setSortingEnabled(sortingEnabled); + view.setModel(&sfpm); + view.show(); + + view.sortByColumn(1, Qt::DescendingOrder); + QCOMPARE(view.horizontalHeader()->sortIndicatorSection(), 1); + QCOMPARE(view.model()->data(view.model()->index(0, 0)).toString(), QString::fromLatin1("c")); + QCOMPARE(view.model()->data(view.model()->index(1, 0)).toString(), QString::fromLatin1("d")); + QCOMPARE(view.model()->data(view.model()->index(0, 1)).toString(), QString::fromLatin1("h")); + QCOMPARE(view.model()->data(view.model()->index(1, 1)).toString(), QString::fromLatin1("g")); + + view.sortByColumn(0, Qt::AscendingOrder); + QCOMPARE(view.horizontalHeader()->sortIndicatorSection(), 0); + QCOMPARE(view.model()->data(view.model()->index(0, 0)).toString(), QString::fromLatin1("a")); + QCOMPARE(view.model()->data(view.model()->index(1, 0)).toString(), QString::fromLatin1("b")); + QCOMPARE(view.model()->data(view.model()->index(0, 1)).toString(), QString::fromLatin1("f")); + QCOMPARE(view.model()->data(view.model()->index(1, 1)).toString(), QString::fromLatin1("e")); + + view.sortByColumn(-1, Qt::AscendingOrder); + QCOMPARE(view.horizontalHeader()->sortIndicatorSection(), -1); + QCOMPARE(view.model()->data(view.model()->index(0, 0)).toString(), QString::fromLatin1("b")); + QCOMPARE(view.model()->data(view.model()->index(1, 0)).toString(), QString::fromLatin1("d")); + QCOMPARE(view.model()->data(view.model()->index(0, 1)).toString(), QString::fromLatin1("e")); + QCOMPARE(view.model()->data(view.model()->index(1, 1)).toString(), QString::fromLatin1("g")); + + // a new 'sortByColumn()' should do a re-sort (e.g. due to the data changed), QTBUG-86268 + view.setModel(&model); + view.sortByColumn(0, Qt::AscendingOrder); + QCOMPARE(view.model()->data(view.model()->index(0, 0)).toString(), QString::fromLatin1("a")); + model.setItem(0, 0, new QStandardItem("x")); + view.sortByColumn(0, Qt::AscendingOrder); + QCOMPARE(view.model()->data(view.model()->index(0, 0)).toString(), QString::fromLatin1("b")); +} + void tst_QTableView::scrollTo_data() { QTest::addColumn<QAbstractItemView::ScrollMode>("verticalScrollMode"); diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp index 3445e1edef..94f3e52ff3 100644 --- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp @@ -2852,6 +2852,14 @@ void tst_QTreeView::sortByColumn() QCOMPARE(view.model()->data(view.model()->index(1, 0)).toString(), QString::fromLatin1("d")); QCOMPARE(view.model()->data(view.model()->index(0, 1)).toString(), QString::fromLatin1("e")); QCOMPARE(view.model()->data(view.model()->index(1, 1)).toString(), QString::fromLatin1("g")); + + // a new 'sortByColumn()' should do a re-sort (e.g. due to the data changed), QTBUG-86268 + view.setModel(&model); + view.sortByColumn(0, Qt::AscendingOrder); + QCOMPARE(view.model()->data(view.model()->index(0, 0)).toString(), QString::fromLatin1("a")); + model.setItem(0, 0, new QStandardItem("x")); + view.sortByColumn(0, Qt::AscendingOrder); + QCOMPARE(view.model()->data(view.model()->index(0, 0)).toString(), QString::fromLatin1("b")); } /* |