文字显示不正确 - 字符是正方形 - 找不到可疑字体

时间:2014-08-05 16:22:27

标签: fonts embedded qt5

我有一个运行Linux的嵌入式ARM系统。我已经成功地在我的目标上构建并安装了Qt 5.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;
    }
}

输出:

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

1 个答案:

答案 0 :(得分:3)

似乎你缺少字体渲染引擎。

  

Qt在哪里寻找字体?

根据Qt embedded reference document on fonts

  

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

因为你能够列出它们看来这些字体确实在Qt的lib/fonts/子目录中。

现在您需要确保拥有FreeType 2字体引擎,Qt用于字体渲染。您是否在启用-qt-freetype的情况下编译?查看configure page了解更多信息。

  

是否有某种字体后备方案?...是否选择了最近的字体&#34;?

没有字体&#34;距离&#34;。我希望只要找到这些字体就会加载某种优先级。

  

是否有工具报告特定的各种字体   应用程序需要,以便我可以确保他们的目标?

我不确定是否可能。但您可以使用查看可用的字体 &#34;工具中的QConfig工具&#34; Qt源的子目录。 QConfig snapshot