【发布时间】: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
【问题讨论】: