diff options
-rw-r--r-- | src/widgets/itemviews/qstyleditemdelegate.cpp | 4 | ||||
-rw-r--r-- | src/widgets/styles/qcommonstyle.cpp | 19 | ||||
-rw-r--r-- | tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp | 17 |
3 files changed, 35 insertions, 5 deletions
diff --git a/src/widgets/itemviews/qstyleditemdelegate.cpp b/src/widgets/itemviews/qstyleditemdelegate.cpp index 7442fc58c8..038b0bdcd0 100644 --- a/src/widgets/itemviews/qstyleditemdelegate.cpp +++ b/src/widgets/itemviews/qstyleditemdelegate.cpp @@ -285,6 +285,10 @@ void QStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option, switch (value->userType()) { case QMetaType::QIcon: { option->icon = qvariant_cast<QIcon>(*value); + if (option->icon.isNull()) { + option->features &= ~QStyleOptionViewItem::HasDecoration; + break; + } QIcon::Mode mode; if (!(option->state & QStyle::State_Enabled)) mode = QIcon::Disabled; diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index c7dee0549e..1af0038dc2 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -941,12 +941,21 @@ QSize QCommonStylePrivate::viewItemSize(const QStyleOptionViewItem *option, int break; } case QStyleOptionViewItem::Top: - case QStyleOptionViewItem::Bottom: - if (wrapText) - bounds.setWidth(bounds.isValid() ? bounds.width() - 2 * textMargin : option->decorationSize.width()); - else - bounds.setWidth(QFIXED_MAX); + case QStyleOptionViewItem::Bottom: { + int width; + if (wrapText) { + if (bounds.isValid()) + width = bounds.width() - 2 * textMargin; + else if (option->features & QStyleOptionViewItem::HasDecoration) + width = option->decorationSize.width(); + else + width = 0; + } else { + width = QFIXED_MAX; + } + bounds.setWidth(width); break; + } default: break; } diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp index 3c43b3fcd5..c7bd1c934a 100644 --- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp +++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp @@ -156,6 +156,7 @@ private slots: void spacingWithWordWrap(); void scrollOnRemove_data(); void scrollOnRemove(); + void wordWrapNullIcon(); }; // Testing get/set functions @@ -3174,6 +3175,22 @@ void tst_QListView::scrollOnRemove() QTRY_COMPARE(view.verticalScrollBar()->value(), item25Position); } +void tst_QListView::wordWrapNullIcon() +{ + QListView listView; + listView.setViewMode(QListView::IconMode); + listView.setWrapping(true); + listView.setWordWrap(true); + listView.setFixedSize(QSize(100, 500)); + + QStandardItemModel model; + QStandardItem *item = new QStandardItem(QIcon(), "This is a long text for word wrapping Item_"); + model.appendRow(item); + listView.setModel(&model); + + listView.indexAt(QPoint(0, 0)); +} + QTEST_MAIN(tst_QListView) #include "tst_qlistview.moc" |