summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/itemviews/qlistview.cpp2
-rw-r--r--tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp81
2 files changed, 78 insertions, 5 deletions
diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp
index 11ef2430f8..80d9e27159 100644
--- a/src/widgets/itemviews/qlistview.cpp
+++ b/src/widgets/itemviews/qlistview.cpp
@@ -2274,7 +2274,7 @@ QListViewItem QListModeViewBase::indexToListViewItem(const QModelIndex &index) c
: segmentPositions.at(segment + 1));
size.setWidth(right - pos.x());
} else { // make the items as wide as the viewport
- size.setWidth(qMax(size.width(), viewport()->width()));
+ size.setWidth(qMax(size.width(), viewport()->width() - 2 * spacing()));
}
}
diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
index 53a8f2b41e..76408c4855 100644
--- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
+++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
@@ -138,6 +138,8 @@ private slots:
void draggablePaintPairs();
void taskQTBUG_21804_hiddenItemsAndScrollingWithKeys_data();
void taskQTBUG_21804_hiddenItemsAndScrollingWithKeys();
+ void spacing_data();
+ void spacing();
};
// Testing get/set functions
@@ -2161,13 +2163,17 @@ void tst_QListView::draggablePaintPairs()
void tst_QListView::taskQTBUG_21804_hiddenItemsAndScrollingWithKeys_data()
{
QTest::addColumn<int>("flow");
- QTest::newRow("flow TopToBottom") << static_cast<int>(QListView::TopToBottom);
- QTest::newRow("flow LeftToRight") << static_cast<int>(QListView::LeftToRight);
+ QTest::addColumn<int>("spacing");
+ QTest::newRow("flow TopToBottom no spacing") << static_cast<int>(QListView::TopToBottom) << 0;
+ QTest::newRow("flow TopToBottom with spacing") << static_cast<int>(QListView::TopToBottom) << 5;
+ QTest::newRow("flow LeftToRight no spacing") << static_cast<int>(QListView::LeftToRight) << 0;
+ QTest::newRow("flow LeftToRight with spacing") << static_cast<int>(QListView::LeftToRight) << 5;
}
void tst_QListView::taskQTBUG_21804_hiddenItemsAndScrollingWithKeys()
{
QFETCH(int, flow);
+ QFETCH(int, spacing);
// create some items to show
QStringListModel model;
@@ -2179,6 +2185,7 @@ void tst_QListView::taskQTBUG_21804_hiddenItemsAndScrollingWithKeys()
// create listview
QListView lv;
lv.setFlow(static_cast<QListView::Flow>(flow));
+ lv.setSpacing(spacing);
lv.setModel(&model);
lv.show();
QTest::qWaitForWindowShown(&lv);
@@ -2188,7 +2195,8 @@ void tst_QListView::taskQTBUG_21804_hiddenItemsAndScrollingWithKeys()
lv.setRowHidden(i, true);
// scroll forward and check that selected item is visible always
- for (int i = 0; i < model.rowCount()/2; i++) {
+ int visibleItemCount = model.rowCount()/2;
+ for (int i = 0; i < visibleItemCount; i++) {
if (flow == QListView::TopToBottom)
QTest::keyClick(&lv, Qt::Key_Down);
else
@@ -2198,7 +2206,27 @@ void tst_QListView::taskQTBUG_21804_hiddenItemsAndScrollingWithKeys()
}
// scroll backward
- for (int i = 0; i < model.rowCount()/2; i++) {
+ for (int i = 0; i < visibleItemCount; i++) {
+ if (flow == QListView::TopToBottom)
+ QTest::keyClick(&lv, Qt::Key_Up);
+ else
+ QTest::keyClick(&lv, Qt::Key_Left);
+ QTest::qWait(100);
+ QVERIFY(lv.rect().contains(lv.visualRect(lv.currentIndex())));
+ }
+
+ // scroll forward only half way
+ for (int i = 0; i < visibleItemCount/2; i++) {
+ if (flow == QListView::TopToBottom)
+ QTest::keyClick(&lv, Qt::Key_Down);
+ else
+ QTest::keyClick(&lv, Qt::Key_Right);
+ QTest::qWait(100);
+ QVERIFY(lv.rect().contains(lv.visualRect(lv.currentIndex())));
+ }
+
+ // scroll backward again
+ for (int i = 0; i < visibleItemCount/2; i++) {
if (flow == QListView::TopToBottom)
QTest::keyClick(&lv, Qt::Key_Up);
else
@@ -2208,5 +2236,50 @@ void tst_QListView::taskQTBUG_21804_hiddenItemsAndScrollingWithKeys()
}
}
+void tst_QListView::spacing_data()
+{
+ QTest::addColumn<int>("flow");
+ QTest::addColumn<int>("spacing");
+ QTest::newRow("flow=TopToBottom spacing=0") << static_cast<int>(QListView::TopToBottom) << 0;
+ QTest::newRow("flow=TopToBottom spacing=10") << static_cast<int>(QListView::TopToBottom) << 10;
+ QTest::newRow("flow=LeftToRight spacing=0") << static_cast<int>(QListView::LeftToRight) << 0;
+ QTest::newRow("flow=LeftToRight spacing=10") << static_cast<int>(QListView::LeftToRight) << 10;
+}
+
+void tst_QListView::spacing()
+{
+ QFETCH(int, flow);
+ QFETCH(int, spacing);
+
+ // create some items to show
+ QStringListModel model;
+ QStringList list;
+ for (int i = 0; i < 60; i++)
+ list << QString::number(i);
+ model.setStringList(list);
+
+ // create listview
+ QListView lv;
+ lv.setFlow(static_cast<QListView::Flow>(flow));
+ lv.setModel(&model);
+ lv.setSpacing(spacing);
+ lv.show();
+ QTest::qWaitForWindowShown(&lv);
+
+ // check size and position of first two items
+ QRect item1 = lv.visualRect(lv.model()->index(0, 0));
+ QRect item2 = lv.visualRect(lv.model()->index(1, 0));
+ QCOMPARE(item1.topLeft(), QPoint(flow == QListView::TopToBottom ? spacing : 0, spacing));
+ if (flow == QListView::TopToBottom) {
+ QCOMPARE(item1.width(), lv.viewport()->width() - 2 * spacing);
+ QCOMPARE(item2.topLeft(), QPoint(spacing, spacing + item1.height() + 2 * spacing));
+ }
+ else { // QListView::LeftToRight
+ QCOMPARE(item1.height(), lv.viewport()->height() - 2 * spacing);
+ QCOMPARE(item2.topLeft(), QPoint(spacing + item1.width() + spacing, spacing));
+ }
+}
+
+
QTEST_MAIN(tst_QListView)
#include "tst_qlistview.moc"