Qt 5.15 macOS:使用 QFontDatabase 加载字体时 QML 中的文本变形

问题描述 投票:0回答:1

我们正在开发 Qt5 应用程序,并在 macOS 上使用 Qt 5.15.2 进行构建(在 Catalina 和 Big Sur 上)。

QFontDatabase
加载
QQmlApplicationEngine
文件之前,我们使用
main.qml
在 C++ 中加载 Open Sans 和 Ubuntu 字体。这些字体已直接从 Google 的字体网站下载:https://fonts.google.com/

// before QQmlApplicationEngine::load("qrc:/main.qml");
QList<int> fontIDs;
// OPEN SANS
fontIDs << QFontDatabase::addApplicationFont(":/CoreUIFonts/fonts/opensans/OpenSans-Regular.ttf");
fontIDs << QFontDatabase::addApplicationFont(":/CoreUIFonts/fonts/opensans/OpenSans-Italic.ttf");
fontIDs << QFontDatabase::addApplicationFont(":/CoreUIFonts/fonts/opensans/OpenSans-Bold.ttf");
fontIDs << QFontDatabase::addApplicationFont(":/CoreUIFonts/fonts/opensans/OpenSans-BoldItalic.ttf");
fontIDs << QFontDatabase::addApplicationFont(":/CoreUIFonts/fonts/opensans/OpenSans-ExtraBold.ttf");
fontIDs << QFontDatabase::addApplicationFont(":/CoreUIFonts/fonts/opensans/OpenSans-ExtraBoldItalic.ttf");
fontIDs << QFontDatabase::addApplicationFont(":/CoreUIFonts/fonts/opensans/OpenSans-Light.ttf");
fontIDs << QFontDatabase::addApplicationFont(":/CoreUIFonts/fonts/opensans/OpenSans-LightItalic.ttf");
fontIDs << QFontDatabase::addApplicationFont(":/CoreUIFonts/fonts/opensans/OpenSans-SemiBold.ttf");
fontIDs << QFontDatabase::addApplicationFont(":/CoreUIFonts/fonts/opensans/OpenSans-SemiBoldItalic.ttf");

在极少数情况下,启动构建的应用程序时(在调试模式或发布模式下),使用加载的字体系列的 QML 中显示的文本会失真。

奇怪的是,扭曲的字体仅在新机器上启动应用程序的前几次出现。几次启动后,问题就消失了(至少,我们还没有找到合适的模式)。我们正在努力在我们的机器上可靠地重现此问题,因为它每隔几天构建/测试就会发生一次。这使得调试/查找问题的根本原因变得非常困难,因此很难修复。

我们认为部分问题可能与不存在 qmlcache 文件有关。因此我们尝试删除所有缓存文件,但这并没有使问题再次出现。在 macOS 上,我们知道的 qml 缓存文件存储在

~/Library/<ORGANISATIONNAME>/<APPNAME>/qmlcache
。删除这些并重新启动应用程序不会导致再次发生字体扭曲。

在实例化

main
QApplication
并加载 QML 之前,我们在
QQmlApplicationEngine
函数开始时应用了以下设置。它们似乎不会影响此问题的可重现性。

QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling);
QQuickWindow::setTextRenderType(QQuickWindow::NativeTextRendering);

字体应用于

Text
组件,如下所示:

Text {
   font.family: "Open Sans" // or "Ubuntu"
   font.weight: Font.Normal // or Font.Bold or Font.DemiBold, etc...
}

我们的问题是:

  1. 有人经历过这种情况吗?在 Stackoverflow 或 QT Bugs 门户上进行搜索并未找到与我们遇到的问题相同的报告。
  2. 您能想到我们可以尝试更可靠地重现此问题的其他测试吗?
macos qt fonts qml
1个回答
0
投票

刚刚遇到同样的问题,即使使用系统字体(使用 harfbuzz/fontconfig 和不使用它们),有什么发现或解决方案吗?如有任何想法,我将不胜感激。

© www.soinside.com 2019 - 2024. All rights reserved.