QHeaderView: respect the font role while calculating the elided text

Amends 4d943846128118e1b9932a17ce6f977a0f4127a5:

 - The macOS style must now elide the text by it's own since it is
   no longer done by QHeaderView
 - Add documentation of QStyleOptionHeader::textElideMode
 - Remove unused variables from QHeaderView::initStyleOptionForIndex()

Task-number: QTBUG-86426
Change-Id: I98fc6771c0cd56d6002390125ffbab1269f6dd39
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Christian Ehrlicher 2020-12-08 21:23:48 +01:00 committed by Tor Arne Vestbø
parent ac1008c16f
commit 6fa1038a85
3 changed files with 14 additions and 11 deletions

View File

@ -3520,9 +3520,12 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
proxy()->drawItemPixmap(p, pixr, Qt::AlignVCenter, pixmap); proxy()->drawItemPixmap(p, pixr, Qt::AlignVCenter, pixmap);
textr.translate(pixmap.width() / pixmap.devicePixelRatio() + 2, 0); textr.translate(pixmap.width() / pixmap.devicePixelRatio() + 2, 0);
} }
QString text = header->text;
if (header->textElideMode != Qt::ElideNone)
text = header->fontMetrics.elidedText(text, header->textElideMode, textr.width());
proxy()->drawItemText(p, textr, header->textAlignment | Qt::AlignVCenter, header->palette, proxy()->drawItemText(p, textr, header->textAlignment | Qt::AlignVCenter, header->palette,
header->state & State_Enabled, header->text, QPalette::ButtonText); header->state.testFlag(State_Enabled), text, QPalette::ButtonText);
p->restore(); p->restore();
} }
break; break;

View File

@ -2936,21 +2936,11 @@ void QHeaderView::initStyleOptionForIndex(QStyleOptionHeader *option, int logica
opt.text = d->model->headerData(logicalIndex, d->orientation, opt.text = d->model->headerData(logicalIndex, d->orientation,
Qt::DisplayRole).toString(); Qt::DisplayRole).toString();
int margin = 2 * style()->pixelMetric(QStyle::PM_HeaderMargin, nullptr, this);
const Qt::Alignment headerArrowAlignment = static_cast<Qt::Alignment>(style()->styleHint(QStyle::SH_Header_ArrowAlignment, nullptr, this));
const bool isHeaderArrowOnTheSide = headerArrowAlignment & Qt::AlignVCenter;
if (isSortIndicatorShown() && sortIndicatorSection() == logicalIndex && isHeaderArrowOnTheSide)
margin += style()->pixelMetric(QStyle::PM_HeaderMarkSize, nullptr, this);
const QVariant variant = d->model->headerData(logicalIndex, d->orientation, const QVariant variant = d->model->headerData(logicalIndex, d->orientation,
Qt::DecorationRole); Qt::DecorationRole);
opt.icon = qvariant_cast<QIcon>(variant); opt.icon = qvariant_cast<QIcon>(variant);
if (opt.icon.isNull()) if (opt.icon.isNull())
opt.icon = qvariant_cast<QPixmap>(variant); opt.icon = qvariant_cast<QPixmap>(variant);
if (!opt.icon.isNull()) // see CT_HeaderSection
margin += style()->pixelMetric(QStyle::PM_SmallIconSize, nullptr, this) +
style()->pixelMetric(QStyle::PM_HeaderMargin, nullptr, this);
QVariant var = d->model->headerData(logicalIndex, d->orientation, QVariant var = d->model->headerData(logicalIndex, d->orientation,
Qt::FontRole); Qt::FontRole);

View File

@ -894,6 +894,16 @@ QStyleOptionHeader::QStyleOptionHeader(int version)
\sa sortIndicator \sa sortIndicator
*/ */
/*!
\variable QStyleOptionHeader::textElideMode
\brief where ellipsis should be added for text that is too long to fit
into an item
The default value is Qt::ElideNone.
\sa Qt::TextElideMode
*/
/*! /*!
\class QStyleOptionButton \class QStyleOptionButton
\brief The QStyleOptionButton class is used to describe the \brief The QStyleOptionButton class is used to describe the