【问题标题】:Text displayed incorrectly - characters are squares - suspect fonts not found文本显示不正确 - 字符为正方形 - 未找到可疑字体
【发布时间】:2014-09-01 16:54:54
【问题描述】:

我有一个运行 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

【问题讨论】:

    标签: fonts embedded qt5


    【解决方案1】:

    看来你缺少字体渲染引擎。

    Qt 在哪里寻找字体?

    根据Qt embedded reference document on fonts

    如果 fontconfig 不可用,例如在专用嵌入式系统中 ...,Qt 将退回到使用 QBasicFont 数据库。在这种情况下,Qt 应用程序将寻找字体 在 Qt 的 lib/fonts/ 目录中

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

    现在你需要确保你有 FreeType 2 字体引擎,它被 Qt 用于字体渲染。你编译时启用了-qt-freetype 吗?查看configure page 了解更多信息。

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

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

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

    我不确定这是否可能。但是您可以查看可用的字体,使用 Qt 源代码的“工具”子目录中的QConfig 工具。

    【讨论】:

    • 这看起来是一个很棒的答案。但是,因为出差,我不能使用它,但我肯定会在大约一个半星期后检查它并通知您。谢谢。
    • 顺便说一句,我在QBasicFontDatabase 上找不到任何信息,只有QFontDatabase。为什么文档似乎不存在时提到它?
    • @Steve 它存在,但不是公共 API 的一部分。希望它能解决你的问题。
    猜你喜欢
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2012-08-08
    • 1970-01-01
    相关资源
    最近更新 更多