diff options
-rw-r--r-- | src/widgets/itemviews/qlistview.cpp | 18 | ||||
-rw-r--r-- | src/widgets/itemviews/qlistview_p.h | 2 | ||||
-rw-r--r-- | tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp | 17 |
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" |