diff options
author | ChunLin Wang <wangchunlin@uniontech.com> | 2021-01-11 13:14:43 +0800 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-01-15 08:46:37 +0000 |
commit | c00f52e821a3a982e91d9c4515c3d4d944305a16 (patch) | |
tree | 501a4264c8e189113e102d5cc991592486cb95cb /src/widgets | |
parent | 5b3dbd38ca7685368c878dabcffeef2c3339711a (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
Change-Id: I6e6b2c6a0044462f84db9f76a03be0c6cfaaae8e
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit dafd26acbe7b08f5ddfe60432fe0e49422ac085c)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/widgets')
-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(); } |