QFontComboBox don't response qApp fontDatabaseChanged()

If QFontComboBox is instantiated in the form of new and call
QFontDatabase::addApplicationFont, QFontComboBoxPrivate::_q_updateModel()
will be called when the program exits, at this time qApp will crash.
Fix this by when program exiting, QFontComboBoxPrivate don't need
call _q_updateModel().

Fixes: QTBUG-98099
Done-With: Konstantin Ritt <ritt.ks@gmail.com>
Pick-to: 5.15 6.2
Change-Id: I3df3d19c3d1971288d60f2eef386262befbf396b
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
This commit is contained in:
Zhang Hao 2021-11-10 17:29:21 +08:00
parent 78a8e561b2
commit 9a131b59ee
2 changed files with 12 additions and 5 deletions

View File

@ -311,6 +311,10 @@ public:
void QFontComboBoxPrivate::_q_updateModel()
{
Q_Q(QFontComboBox);
if (QCoreApplication::closingDown())
return;
const int scalableMask = (QFontComboBox::ScalableFonts | QFontComboBox::NonScalableFonts);
const int spacingMask = (QFontComboBox::ProportionalFonts | QFontComboBox::MonospacedFonts);

View File

@ -260,15 +260,18 @@ void tst_QFontComboBox::writingSystem()
// protected void currentFontChanged(QFont const& f)
void tst_QFontComboBox::currentFontChanged()
{
SubQFontComboBox box;
QSignalSpy spy0(&box, SIGNAL(currentFontChanged(QFont)));
// The absence of this file does not affect the test results
QFontDatabase::addApplicationFont("ArianaVioleta-dz2K.ttf");
if (box.model()->rowCount() > 2) {
QTest::keyPress(&box, Qt::Key_Down);
SubQFontComboBox *box = new SubQFontComboBox;
QSignalSpy spy0(box, SIGNAL(currentFontChanged(QFont)));
if (box->model()->rowCount() > 2) {
QTest::keyPress(box, Qt::Key_Down);
QCOMPARE(spy0.count(), 1);
QFont f( "Sans Serif" );
box.setCurrentFont(f);
box->setCurrentFont(f);
QCOMPARE(spy0.count(), 2);
} else
qWarning("Not enough fonts installed on test system. Consider adding some");