summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/itemviews/qlistview.cpp18
-rw-r--r--src/widgets/itemviews/qlistview_p.h2
-rw-r--r--tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp17
3 files changed, 31 insertions, 6 deletions
diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp
index 5be0bebe54..097802c909 100644
--- a/src/widgets/itemviews/qlistview.cpp
+++ b/src/widgets/itemviews/qlistview.cpp
@@ -900,14 +900,20 @@ void QListView::startDrag(Qt::DropActions supportedActions)
QStyleOptionViewItem QListView::viewOptions() const
{
Q_D(const QListView);
- QStyleOptionViewItem option = QAbstractItemView::viewOptions();
- if (!d->iconSize.isValid()) { // otherwise it was already set in abstractitemview
- int pm = (d->viewMode == ListMode
- ? style()->pixelMetric(QStyle::PM_ListViewIconSize, 0, this)
- : style()->pixelMetric(QStyle::PM_IconViewIconSize, 0, this));
+ return d->viewOptions();
+}
+
+QStyleOptionViewItem QListViewPrivate::viewOptions() const
+{
+ Q_Q(const QListView);
+ QStyleOptionViewItem option = QAbstractItemViewPrivate::viewOptions();
+ if (!iconSize.isValid()) { // otherwise it was already set in abstractitemview
+ int pm = (viewMode == QListView::ListMode
+ ? q->style()->pixelMetric(QStyle::PM_ListViewIconSize, 0, q)
+ : q->style()->pixelMetric(QStyle::PM_IconViewIconSize, 0, q));
option.decorationSize = QSize(pm, pm);
}
- if (d->viewMode == IconMode) {
+ if (viewMode == QListView::IconMode) {
option.showDecorationSelected = false;
option.decorationPosition = QStyleOptionViewItem::Top;
option.displayAlignment = Qt::AlignCenter;
diff --git a/src/widgets/itemviews/qlistview_p.h b/src/widgets/itemviews/qlistview_p.h
index ea9f31a62a..6084479e6a 100644
--- a/src/widgets/itemviews/qlistview_p.h
+++ b/src/widgets/itemviews/qlistview_p.h
@@ -394,6 +394,8 @@ public:
}
}
+ QStyleOptionViewItem viewOptions() const;
+
void scrollElasticBandBy(int dx, int dy);
QItemViewPaintPairs draggablePaintPairs(const QModelIndexList &indexes, QRect *r) const;
diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
index 22f1e2fe4e..d252d78624 100644
--- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
+++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
@@ -141,6 +141,7 @@ private slots:
void spacing_data();
void spacing();
void testScrollToWithHidden();
+ void testViewOptions();
};
// Testing get/set functions
@@ -910,6 +911,10 @@ class PublicListView : public QListView
void setPositionForIndex(const QPoint &pos, const QModelIndex &index) {
QListView::setPositionForIndex(pos, index);
}
+
+ QStyleOptionViewItem viewOptions() const {
+ return QListView::viewOptions();
+ }
};
class TestDelegate : public QItemDelegate
@@ -2308,5 +2313,17 @@ void tst_QListView::testScrollToWithHidden()
QCOMPARE(expectedScrollBarValue, lv.verticalScrollBar()->value());
}
+
+
+void tst_QListView::testViewOptions()
+{
+ PublicListView view;
+ QStyleOptionViewItem options = view.viewOptions();
+ QCOMPARE(options.decorationPosition, QStyleOptionViewItem::Left);
+ view.setViewMode(QListView::IconMode);
+ options = view.viewOptions();
+ QCOMPARE(options.decorationPosition, QStyleOptionViewItem::Top);
+}
+
QTEST_MAIN(tst_QListView)
#include "tst_qlistview.moc"