summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
diff options
context:
space:
mode:
authorVyacheslav Grigoryev <armagvvg@gmail.com>2016-04-04 01:03:20 +0300
committerVyacheslav Grigoryev <armagvvg@gmail.com>2016-04-21 21:13:38 +0000
commit072485048fc8360b822e35b4cc43b0728e04cc1b (patch)
treee6d17b28b5334259222d462cf54baa4ef395dfca /tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
parent9def501433e80e1a45c0d7888b9ceba4e32ca1fa (diff)
QHeaderView: fixing selection of reordered rows and columns
The old code incorrectly calculated visual region for a selection (specified by QItemSelection object) in case of reordered / swapped rows or columns. It used the leftmost and rightmost (upmost and downmost for vertical mode) logical indexes directly. However some middle logical index (in case of reorder) may be the leftmost or rightmost visual index. In such cases the repainting didn't work properly. This fix first checks whether reordering / swapping is in use. If it isn't (ie visual=logical) we use code similar to the old code. Otherwise the new code scans all selected logical indexes, translates them into visual ones and gets the correct leftmost and rightmost indexes. [ChangeLog][QtWidgets][QHeaderView] Fixed a repainting issue when items had been reordered. Task-number: QTBUG-50171 Change-Id: If6afabebf445cf32a8e0afe262b6ee149e7c4b2b Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com>
Diffstat (limited to 'tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp')
-rw-r--r--tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
index 55fcf04846..4736aa5c12 100644
--- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
+++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
@@ -77,6 +77,7 @@ public:
void testEvent();
void testhorizontalOffset();
void testverticalOffset();
+ void testVisualRegionForSelection();
friend class tst_QHeaderView;
};
@@ -211,6 +212,7 @@ private slots:
void QTBUG8650_crashOnInsertSections();
void QTBUG12268_hiddenMovedSectionSorting();
void QTBUG14242_hideSectionAutoSize();
+ void QTBUG50171_visualRegionForSwappedItems();
void ensureNoIndexAtLength();
void offsetConsistent();
@@ -2282,6 +2284,24 @@ void tst_QHeaderView::QTBUG14242_hideSectionAutoSize()
QCOMPARE(calced_length, afterlength);
}
+void tst_QHeaderView::QTBUG50171_visualRegionForSwappedItems()
+{
+ protected_QHeaderView headerView(Qt::Horizontal);
+ QtTestModel model;
+ model.rows = 2;
+ model.cols = 3;
+ headerView.setModel(&model);
+ headerView.swapSections(1, 2);
+ headerView.hideSection(0);
+ headerView.testVisualRegionForSelection();
+}
+
+void protected_QHeaderView::testVisualRegionForSelection()
+{
+ QRegion r = visualRegionForSelection(QItemSelection(model()->index(1, 0), model()->index(1, 2)));
+ QCOMPARE(r.boundingRect().contains(QRect(1, 1, length() - 2, 1)), true);
+}
+
void tst_QHeaderView::ensureNoIndexAtLength()
{
QTableView qtv;