From 6fa1038a85f8e0da7c91b510cf01fe1bbcf37c0f Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Tue, 8 Dec 2020 21:23:48 +0100 Subject: [PATCH] QHeaderView: respect the font role while calculating the elided text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ø --- src/plugins/styles/mac/qmacstyle_mac.mm | 5 ++++- src/widgets/itemviews/qheaderview.cpp | 10 ---------- src/widgets/styles/qstyleoption.cpp | 10 ++++++++++ 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm index 152d51da1ad..e6939a0fdaf 100644 --- a/src/plugins/styles/mac/qmacstyle_mac.mm +++ b/src/plugins/styles/mac/qmacstyle_mac.mm @@ -3520,9 +3520,12 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter proxy()->drawItemPixmap(p, pixr, Qt::AlignVCenter, pixmap); 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, - header->state & State_Enabled, header->text, QPalette::ButtonText); + header->state.testFlag(State_Enabled), text, QPalette::ButtonText); p->restore(); } break; diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index d6c9700ed31..1ddcad8fd0c 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -2936,21 +2936,11 @@ void QHeaderView::initStyleOptionForIndex(QStyleOptionHeader *option, int logica opt.text = d->model->headerData(logicalIndex, d->orientation, Qt::DisplayRole).toString(); - int margin = 2 * style()->pixelMetric(QStyle::PM_HeaderMargin, nullptr, this); - - const Qt::Alignment headerArrowAlignment = static_cast(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, Qt::DecorationRole); opt.icon = qvariant_cast(variant); if (opt.icon.isNull()) opt.icon = qvariant_cast(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, Qt::FontRole); diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp index 5bb5cca8b84..f4e5cba5e55 100644 --- a/src/widgets/styles/qstyleoption.cpp +++ b/src/widgets/styles/qstyleoption.cpp @@ -894,6 +894,16 @@ QStyleOptionHeader::QStyleOptionHeader(int version) \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 \brief The QStyleOptionButton class is used to describe the