diff options
author | ChunLin Wang <wangchunlin@uniontech.com> | 2021-01-11 13:14:43 +0800 |
---|---|---|
committer | ChunLin Wang <wangchunlin@uniontech.com> | 2021-01-15 14:38:35 +0800 |
commit | dafd26acbe7b08f5ddfe60432fe0e49422ac085c (patch) | |
tree | 2cc1d0a61ea78e13452d2999289725bfa7956ad9 /src | |
parent | ab2c61e6384bbb5a0d154caa8f4784f9053147fe (diff) |
Fix QApplication::font returns the font unstable according to the object
If a default font was not registered for the widget's class, it returns the default font of its nearest registered superclass.
Fixes: QTBUG-89910
Pick-to: 5.15 6.0
Change-Id: I6e6b2c6a0044462f84db9f76a03be0c6cfaaae8e
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/widgets/kernel/qapplication.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index dfd7402e0d..63c3f9dd9b 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -1270,9 +1270,11 @@ QFont QApplication::font() /*! \overload - Returns the default font for the \a widget. + Returns the default font for the \a widget. If a default font was not + registered for the \a{widget}'s class, it returns the default font of + its nearest registered superclass. - \sa fontMetrics(), QWidget::setFont() + \sa fontMetrics(), setFont(), QWidget::setFont() */ QFont QApplication::font(const QWidget *widget) @@ -1290,14 +1292,16 @@ QFont QApplication::font(const QWidget *widget) return hash->value(QByteArrayLiteral("QMiniFont")); } #endif - FontHashConstIt it = hash->constFind(widget->metaObject()->className()); + // Return the font for the nearest registered superclass + const QMetaObject *metaObj = widget->metaObject(); + FontHashConstIt it = hash->constFind(metaObj->className()); const FontHashConstIt cend = hash->constEnd(); + while (it == cend && metaObj != &QWidget::staticMetaObject) { + metaObj = metaObj->superClass(); + it = hash->constFind(metaObj->className()); + } if (it != cend) return it.value(); - for (it = hash->constBegin(); it != cend; ++it) { - if (widget->inherits(it.key())) - return it.value(); - } } return font(); } |