diff --git a/qtbase.pro b/qtbase.pro index 59d8d958a3f..4f1871fe0a6 100644 --- a/qtbase.pro +++ b/qtbase.pro @@ -1,3 +1,5 @@ + + ##################################################################### # Main projectfile ##################################################################### diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index becf1e1a247..d6c9700ed31 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -2952,10 +2952,11 @@ void QHeaderView::initStyleOptionForIndex(QStyleOptionHeader *option, int logica margin += style()->pixelMetric(QStyle::PM_SmallIconSize, nullptr, this) + style()->pixelMetric(QStyle::PM_HeaderMargin, nullptr, this); - if (d->textElideMode != Qt::ElideNone) { - const QRect textRect = style()->subElementRect(QStyle::SE_HeaderLabel, &opt, this); - opt.text = opt.fontMetrics.elidedText(opt.text, d->textElideMode, textRect.width() - margin); - } + QVariant var = d->model->headerData(logicalIndex, d->orientation, + Qt::FontRole); + if (var.isValid() && var.canConvert()) + opt.fontMetrics = QFontMetrics(qvariant_cast(var)); + opt.textElideMode = d->textElideMode; QVariant foregroundBrush = d->model->headerData(logicalIndex, d->orientation, Qt::ForegroundRole); diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index fad02d5ae99..54489c6379e 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -1659,13 +1659,20 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, else rect.setRight(rect.right() - pixw - margin); } + QFontMetrics fm(header->fontMetrics); if (header->state & QStyle::State_On) { QFont fnt = p->font(); fnt.setBold(true); p->setFont(fnt); + fm = QFontMetrics((p->font())); } + QString text; + if (header->textElideMode != Qt::ElideNone) + text = fm.elidedText(header->text, header->textElideMode, rect.width()); + else + text = header->text; proxy()->drawItemText(p, rect, header->textAlignment, header->palette, - (header->state & State_Enabled), header->text, QPalette::ButtonText); + header->state.testFlag(State_Enabled), text, QPalette::ButtonText); } break; #if QT_CONFIG(toolbutton) diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp index c69aac11bb8..5bb5cca8b84 100644 --- a/src/widgets/styles/qstyleoption.cpp +++ b/src/widgets/styles/qstyleoption.cpp @@ -739,11 +739,7 @@ QStyleOptionGroupBox::QStyleOptionGroupBox(int version) */ QStyleOptionHeader::QStyleOptionHeader() - : QStyleOption(QStyleOptionHeader::Version, SO_Header), - section(0), textAlignment(Qt::AlignLeft), iconAlignment(Qt::AlignLeft), - position(QStyleOptionHeader::Beginning), - selectedPosition(QStyleOptionHeader::NotAdjacent), sortIndicator(None), - orientation(Qt::Horizontal) + : QStyleOptionHeader(QStyleOptionHeader::Version) { } @@ -755,7 +751,7 @@ QStyleOptionHeader::QStyleOptionHeader(int version) section(0), textAlignment(Qt::AlignLeft), iconAlignment(Qt::AlignLeft), position(QStyleOptionHeader::Beginning), selectedPosition(QStyleOptionHeader::NotAdjacent), sortIndicator(None), - orientation(Qt::Horizontal) + orientation(Qt::Horizontal), textElideMode(Qt::ElideNone), unused(0) { } diff --git a/src/widgets/styles/qstyleoption.h b/src/widgets/styles/qstyleoption.h index 38e70e2078b..4998d8cf14e 100644 --- a/src/widgets/styles/qstyleoption.h +++ b/src/widgets/styles/qstyleoption.h @@ -219,7 +219,9 @@ public: SectionPosition position; SelectedPosition selectedPosition; SortIndicator sortIndicator; - Qt::Orientation orientation; + Qt::Orientation orientation:2; + Qt::TextElideMode textElideMode:2; + int unused:28; QStyleOptionHeader(); QStyleOptionHeader(const QStyleOptionHeader &other) : QStyleOption(Version, Type) { *this = other; }