From dc57a3137d440e1616f595fc244978f7a3a2d4d5 Mon Sep 17 00:00:00 2001 From: Nodir Temirkhodjaev Date: Tue, 17 Dec 2024 15:33:50 +0500 Subject: [PATCH] QFusionStyle: Use QFontMetricsF instead of QFontMetrics - CT_MenuItem: Use qCeil() - CE_MenuItem: Add 0.5 to width for elidedText(), because of qRound() in the QFontMetrics::horizontalAdvance() Fixes: QTBUG-132102 Change-Id: Iaced11905357abb496d4ad3c20be0babb17cf121 Reviewed-by: Christian Ehrlicher --- src/widgets/styles/qfusionstyle.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index 9fec0fa435a..558e4d98c57 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -1553,9 +1553,9 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio font.setBold(true); p->setFont(font); - const QFontMetrics fontMetrics(font); + const QFontMetricsF fontMetrics(font); const QString textToDraw = fontMetrics.elidedText(s.left(tabIndex).toString(), - Qt::ElideMiddle, vTextRect.width(), + Qt::ElideMiddle, vTextRect.width() + 0.5f, text_flags); if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option, widget)) { p->setPen(menuitem->palette.light().color()); @@ -2957,11 +2957,11 @@ QSize QFusionStyle::sizeFromContents(ContentsType type, const QStyleOption *opti else if (menuItem->menuItemType == QStyleOptionMenuItem::SubMenu) w += 2 * QStyleHelper::dpiScaled(QFusionStylePrivate::menuArrowHMargin, option); else if (menuItem->menuItemType == QStyleOptionMenuItem::DefaultItem) { - const QFontMetrics fm(menuItem->font); + const QFontMetricsF fm(menuItem->font); QFont fontBold = menuItem->font; fontBold.setBold(true); - const QFontMetrics fmBold(fontBold); - w += fmBold.horizontalAdvance(menuItem->text) - fm.horizontalAdvance(menuItem->text); + const QFontMetricsF fmBold(fontBold); + w += qCeil(fmBold.horizontalAdvance(menuItem->text) - fm.horizontalAdvance(menuItem->text)); } const qreal dpi = QStyleHelper::dpi(option); // Windows always shows a check column