diff options
| author | Doris Verria <doris.verria@qt.io> | 2026-09-17 22:00:09 +0200 |
|---|---|---|
| committer | Doris Verria <doris.verria@qt.io> | 2026-09-29 09:22:34 +0000 |
| commit | 40ad27761b4618cb9e9a70f8675f3392e94372c0 (patch) | |
| tree | 493cda88c9edc65b7f31bdebd220706400aa2434 | |
| parent | 3c517dd02a1e669d450b363384121a7d262f41a2 (diff) | |
QStyleKitStyle: Clear injected widget fonts when switching themes/styles
A font property defined in a theme or style persisted to some widgets
even after switching to a different theme/style. This was because
unsetStyleFont() reverted against QWidget::font() whose resolve mask
also covers inherited attributes. Since when switching style/theme
we walk QWidgetPrivate::allWidgets in no specified order, a widget
can be reverted while its ancestor carries the old font, so those bits
get written backs as a locally set font so next time setStyleFont()
is called, it captures them as baseline font. To fix, use
QWidgetPrivate::localFont instead which has the direct font resolve
mask.
While at it, remove the check in setStyleFont() which guarded
setFont() on QFont::operator==, which ignores the resolve mask, making
the widget's mask depend on whether the values happened to coincide.
setFont() already no-ops when the the font is unchanged.
Pick-to: 6.12
Change-Id: I2c249dc4a02e3b957b5b490a7da600432787c2a2
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
| -rw-r--r-- | src/labs/stylekit/widgets/qstylekitstyle.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/labs/stylekit/widgets/qstylekitstyle.cpp b/src/labs/stylekit/widgets/qstylekitstyle.cpp index 316d7039e8..5c53f36c75 100644 --- a/src/labs/stylekit/widgets/qstylekitstyle.cpp +++ b/src/labs/stylekit/widgets/qstylekitstyle.cpp @@ -729,7 +729,7 @@ void QStyleKitStylePrivate::unsetStyleFont(QWidget *widget) auto customFont = std::move(*it); customFontWidgets.erase(it); - widget->setFont(std::move(customFont).reverted(widget->font())); + widget->setFont(std::move(customFont).reverted(QWidgetPrivate::get(widget)->localFont())); } void QStyleKitStylePrivate::setStyleFont(QWidget *widget, const QFont &styleFont) @@ -753,8 +753,7 @@ void QStyleKitStylePrivate::setStyleFont(QWidget *widget, const QFont &styleFont const QFont &baseline = it->oldWidgetValue; QFont merged = styleFont.resolve(baseline); merged.setResolveMask(baseline.resolveMask() | styleMask); - if (widget->font() != merged) - widget->setFont(merged); + widget->setFont(merged); } void QStyleKitStylePrivate::refreshStyleFont(QWidget *widget) |
