Fonts 文本显示不正确-字符为正方形-未找到可疑字体

Fonts 文本显示不正确-字符为正方形-未找到可疑字体,fonts,embedded,qt5,Fonts,Embedded,Qt5,我有一个运行Linux的嵌入式ARM系统。我已经成功地在我的目标上构建并安装了Qt5.3.1,并且我能够构建Qt应用程序并运行/调试它们。请注意,我的目标没有安装X,正在使用的QPA是eglfs(如果这很重要的话) 屏幕上显示的任何文本都显示为一系列方形字符。我怀疑字体未正确定位/加载。我找不到多少关于这个主题的像样的文档 如果我创建QFontDatabase对象并查询它,我就有固定宽度、衬线和无衬线字体系列,它们有各种各样的点大小(或者我从我看到的情况猜出来,请参阅下面的代码及其输出) 我把

我有一个运行Linux的嵌入式ARM系统。我已经成功地在我的目标上构建并安装了Qt5.3.1,并且我能够构建Qt应用程序并运行/调试它们。请注意,我的目标没有安装X,正在使用的QPA是eglfs(如果这很重要的话)

屏幕上显示的任何文本都显示为一系列方形字符。我怀疑字体未正确定位/加载。我找不到多少关于这个主题的像样的文档

  • 如果我创建QFontDatabase对象并查询它,我就有固定宽度、衬线和无衬线字体系列,它们有各种各样的点大小(或者我从我看到的情况猜出来,请参阅下面的代码及其输出)
  • 我把我的Windows机器的Arial.ttf的副本放在目标目录中,我相信Qt正在搜索字体,但没有用
不幸的是,没有错误消息可用于解决此问题!因此,我有以下问题:

  • 有没有一种方法可以从Qt获取更多信息(比如调试消息),比如它在哪里查找字体,什么时候找不到字体等等
  • 是否有某种字体回退方案?我对这个主题不太了解,但是如果Arial.ttf是唯一可用的字体,并且应用程序尝试加载Helvetica,它是选择“最接近的字体”,还是干脆放弃并在屏幕上放置方框
  • 我主要使用Qt示例进行测试。是否有一个工具可以报告特定应用程序所需的各种字体,以便我可以确保它们符合目标
  • 。。。?也许知道更多的人可以提供其他有用的信息

下面是我运行的一些代码,看看是否可以了解Qt认为可用字体的内容:

QFontDatabase db;
foreach (const QString &fam, db.families()) {
    foreach (const QString &style, db.styles(fam)) {
        std::cout << fam.toStdString() << std::endl;
        QString sizes;
        foreach (int points, db.smoothSizes(fam, style))
            sizes += QString::number(points) + " ";
        std::cout << sizes.trimmed().toStdString() << std::endl;
    }
}

您似乎缺少字体渲染引擎

Qt在哪里寻找字体

根据,

如果fontconfig不可用,例如在专用嵌入式系统中 …,Qt将退回使用 QBasicFontDatabase。在这种情况下,Qt应用程序将查找字体 在Qt的lib/fonts/目录中

当您能够列出它们时,这些字体似乎确实在Qt的
lib/fonts/
子目录中

现在您需要确保您有FreeType 2字体引擎,Qt使用它进行字体渲染。您是否在启用了
-qt freetype
的情况下编译?有关更多信息,请参阅

有某种字体回退方案吗?。。。它是否选择“最接近的字体”

没有字体“距离”这样的东西。我希望只要找到字体,就会以某种优先级加载它们

是否有一个工具可以报告特定用户使用的各种字体 应用程序需要这样才能确保它们在目标上

我不确定这是否可能。但是您可以使用 Qt源的“tool”子目录中的
QConfig
工具。

这看起来是个很棒的答案。然而,由于出差的原因,我不能使用任何一个,但我肯定会在一周半后检查一下,并让你知道。谢谢。顺便说一下,我找不到关于
QBasicFontDatabase
的任何信息,只是
QFontDatabase
。为什么文档在似乎不存在的情况下引用它?@Steve it存在,但不是公共API的一部分。希望它能解决你的问题。
Monospace
Normal
6 7 8 9 10 11 12 14 16 18 20 22 24 26 28 36 48 72
Italic
6 7 8 9 10 11 12 14 16 18 20 22 24 26 28 36 48 72
Oblique
6 7 8 9 10 11 12 14 16 18 20 22 24 26 28 36 48 72
Sans Serif
Normal
6 7 8 9 10 11 12 14 16 18 20 22 24 26 28 36 48 72
Italic
6 7 8 9 10 11 12 14 16 18 20 22 24 26 28 36 48 72
Oblique
6 7 8 9 10 11 12 14 16 18 20 22 24 26 28 36 48 72
Serif
Normal
6 7 8 9 10 11 12 14 16 18 20 22 24 26 28 36 48 72
Italic
6 7 8 9 10 11 12 14 16 18 20 22 24 26 28 36 48 72
Oblique
6 7 8 9 10 11 12 14 16 18 20 22 24 26 28 36 48 72