diff options
Diffstat (limited to 'src/widgets/itemviews/qabstractitemview.cpp')
-rw-r--r-- | src/widgets/itemviews/qabstractitemview.cpp | 80 |
1 files changed, 48 insertions, 32 deletions
diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index bd835f56cc..a6b49c05b7 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -1718,7 +1718,8 @@ bool QAbstractItemView::viewportEvent(QEvent *event) case QEvent::WhatsThis: { QHelpEvent *he = static_cast<QHelpEvent*>(event); const QModelIndex index = indexAt(he->pos()); - QStyleOptionViewItem option = viewOptions(); + QStyleOptionViewItem option; + initViewItemOption(&option); option.rect = visualRect(index); option.state |= (index == currentIndex() ? QStyle::State_HasFocus : QStyle::State_None); @@ -1931,7 +1932,8 @@ void QAbstractItemView::mouseReleaseEvent(QMouseEvent *event) emit clicked(index); if (edited) return; - QStyleOptionViewItem option = viewOptions(); + QStyleOptionViewItem option; + initViewItemOption(&option); if (d->pressedAlreadySelected) option.state |= QStyle::State_Selected; if ((d->model->flags(index) & Qt::ItemIsEnabled) @@ -2720,7 +2722,8 @@ void QAbstractItemView::updateEditorGeometries() d->executePostedLayout(); return; } - QStyleOptionViewItem option = viewOptions(); + QStyleOptionViewItem option; + initViewItemOption(&option); QEditorIndexHash::iterator it = d->editorIndexHash.begin(); QWidgetList editorsToRelease; QWidgetList editorsToHide; @@ -3018,7 +3021,9 @@ QSize QAbstractItemView::sizeHintForIndex(const QModelIndex &index) const if (!d->isIndexValid(index)) return QSize(); const auto delegate = d->delegateForIndex(index); - return delegate ? delegate->sizeHint(viewOptions(), index) : QSize(); + QStyleOptionViewItem option; + initViewItemOption(&option); + return delegate ? delegate->sizeHint(option, index) : QSize(); } /*! @@ -3046,7 +3051,8 @@ int QAbstractItemView::sizeHintForRow(int row) const ensurePolished(); - QStyleOptionViewItem option = viewOptions(); + QStyleOptionViewItem option; + initViewItemOption(&option); int height = 0; int colCount = d->model->columnCount(d->root); for (int c = 0; c < colCount; ++c) { @@ -3076,7 +3082,8 @@ int QAbstractItemView::sizeHintForColumn(int column) const ensurePolished(); - QStyleOptionViewItem option = viewOptions(); + QStyleOptionViewItem option; + initViewItemOption(&option); int width = 0; int rows = d->model->rowCount(d->root); for (int r = 0; r < rows; ++r) { @@ -3098,7 +3105,8 @@ int QAbstractItemView::sizeHintForColumn(int column) const void QAbstractItemView::openPersistentEditor(const QModelIndex &index) { Q_D(QAbstractItemView); - QStyleOptionViewItem options = viewOptions(); + QStyleOptionViewItem options; + initViewItemOption(&options); options.rect = visualRect(index); options.state |= (index == currentIndex() ? QStyle::State_HasFocus : QStyle::State_None); @@ -3688,41 +3696,46 @@ void QAbstractItemView::startDrag(Qt::DropActions supportedActions) #endif // QT_CONFIG(draganddrop) /*! - Returns a QStyleOptionViewItem structure populated with the view's - palette, font, state, alignments etc. + \since 6.0 + + Initialize the \a option structure with the view's palette, font, state, + alignments etc. + + \note Implementations of this methods should check the \l{QStyleOption::} + version of the structure received, populate all members the implementation + is familiar with, and set the version member to the one supported by the + implementation before returning. */ -QStyleOptionViewItem QAbstractItemView::viewOptions() const +void QAbstractItemView::initViewItemOption(QStyleOptionViewItem *option) const { Q_D(const QAbstractItemView); - QStyleOptionViewItem option; - option.initFrom(this); - option.state &= ~QStyle::State_MouseOver; - option.font = font(); + option->initFrom(this); + option->state &= ~QStyle::State_MouseOver; + option->font = font(); // On mac the focus appearance follows window activation // not widget activation if (!hasFocus()) - option.state &= ~QStyle::State_Active; + option->state &= ~QStyle::State_Active; - option.state &= ~QStyle::State_HasFocus; + option->state &= ~QStyle::State_HasFocus; if (d->iconSize.isValid()) { - option.decorationSize = d->iconSize; + option->decorationSize = d->iconSize; } else { int pm = style()->pixelMetric(QStyle::PM_SmallIconSize, nullptr, this); - option.decorationSize = QSize(pm, pm); + option->decorationSize = QSize(pm, pm); } - option.decorationPosition = QStyleOptionViewItem::Left; - option.decorationAlignment = Qt::AlignCenter; - option.displayAlignment = Qt::AlignLeft|Qt::AlignVCenter; - option.textElideMode = d->textElideMode; - option.rect = QRect(); - option.showDecorationSelected = style()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected, nullptr, this); + option->decorationPosition = QStyleOptionViewItem::Left; + option->decorationAlignment = Qt::AlignCenter; + option->displayAlignment = Qt::AlignLeft|Qt::AlignVCenter; + option->textElideMode = d->textElideMode; + option->rect = QRect(); + option->showDecorationSelected = style()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected, nullptr, this); if (d->wrapItemText) - option.features = QStyleOptionViewItem::WrapText; - option.locale = locale(); - option.locale.setNumberOptions(QLocale::OmitGroupSeparator); - option.widget = this; - return option; + option->features = QStyleOptionViewItem::WrapText; + option->locale = locale(); + option->locale.setNumberOptions(QLocale::OmitGroupSeparator); + option->widget = this; } /*! @@ -4352,7 +4365,8 @@ bool QAbstractItemViewPrivate::sendDelegateEvent(const QModelIndex &index, QEven { Q_Q(const QAbstractItemView); QModelIndex buddy = model->buddy(index); - QStyleOptionViewItem options = q->viewOptions(); + QStyleOptionViewItem options; + q->initViewItemOption(&options); options.rect = q->visualRect(buddy); options.state |= (buddy == q->currentIndex() ? QStyle::State_HasFocus : QStyle::State_None); QAbstractItemDelegate *delegate = delegateForIndex(index); @@ -4364,7 +4378,8 @@ bool QAbstractItemViewPrivate::openEditor(const QModelIndex &index, QEvent *even Q_Q(QAbstractItemView); QModelIndex buddy = model->buddy(index); - QStyleOptionViewItem options = q->viewOptions(); + QStyleOptionViewItem options; + q->initViewItemOption(&options); options.rect = q->visualRect(buddy); options.state |= (buddy == q->currentIndex() ? QStyle::State_HasFocus : QStyle::State_None); @@ -4424,7 +4439,8 @@ QPixmap QAbstractItemViewPrivate::renderToPixmap(const QModelIndexList &indexes, pixmap.fill(Qt::transparent); QPainter painter(&pixmap); - QStyleOptionViewItem option = q->viewOptions(); + QStyleOptionViewItem option; + q->initViewItemOption(&option); option.state |= QStyle::State_Selected; for (int j = 0; j < paintPairs.count(); ++j) { option.rect = paintPairs.at(j).rect.translated(-r->topLeft()); |