From 1aa3edf3f888f394040d32d4a211257f9e9e2791 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Tue, 30 Jan 2018 19:55:37 +0100 Subject: QListView: Honor css :first/:middle/:last Pseudo-States Properly set QStyleOptionViewItem::viewItemPosition to honor the css Pseudo-States. Task-number: QTBUG-27110 Change-Id: I9b9bb4913210feb665fd9d00a71dc4a953a93606 Reviewed-by: Gabriel de Dietrich --- src/widgets/itemviews/qlistview.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/widgets/itemviews/qlistview.cpp') diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp index 7f027595b7..6777b09043 100644 --- a/src/widgets/itemviews/qlistview.cpp +++ b/src/widgets/itemviews/qlistview.cpp @@ -980,9 +980,18 @@ void QListView::paintEvent(QPaintEvent *e) ? qMax(viewport()->size().width(), d->contentsSize().width()) - 2 * d->spacing() : qMax(viewport()->size().height(), d->contentsSize().height()) - 2 * d->spacing(); + const int rowCount = d->commonListView->rowCount(); QVector::const_iterator end = toBeRendered.constEnd(); for (QVector::const_iterator it = toBeRendered.constBegin(); it != end; ++it) { Q_ASSERT((*it).isValid()); + if (rowCount == 1) + option.viewItemPosition = QStyleOptionViewItem::OnlyOne; + else if ((*it).row() == 0) + option.viewItemPosition = QStyleOptionViewItem::Beginning; + else if ((*it).row() == rowCount - 1) + option.viewItemPosition = QStyleOptionViewItem::End; + else + option.viewItemPosition = QStyleOptionViewItem::Middle; option.rect = visualRect(*it); if (flow() == TopToBottom) -- cgit v1.2.3