如何在Qt for Embedded Linux中找到并使用字体?

时间:2015-12-02 11:37:28

标签: c++ css qt fonts embedded-linux

这个问题可能与这个问题有关: Where does QT go to look for fonts?

我正在使用Ubuntu 14.04和Qt for Embedded 4.8并希望全局更改我的应用程序的字体,但我只能使用我安装的字体中的一小部分。

我的应用程序的样式是从我写的CSS文件中加载的:

QWidget {
   font-family: "DejaVu Sans"; /*or any other font*/
}

问题是Qt似乎无法找到我安装的字体。根据文档Deploying Qt for Embedded Linux Applications,Qt应用程序在 lib / fonts / 目录中查找字体,特别是在名为 fontdir 的文件中查找字体。我不知道这个文件是关于什么的,我也找不到它。字体的完整路径(用于调试版本)是: /usr/local/Trolltech/QtEmbedded-4.8.6-x86-dbg/lib/fonts

我使用可以找到的in the Qt 4.8 docu的QFontDatabase来打印我所有可用的字体。不幸的是输出是:

DejaVu Sans: Normal (11)
fixed: Normal (7 12)
helvetica: Normal (8 10 12 14 18 24) Italic (8 10 12 14 18 24) Bold (8 10 12 14 18 24) Bold Italic (8 10 12 14 18 24)
japanese: Normal (23)
micro: Normal (4)
unifont: Normal (16)

但我安装了更多字体。例如, DejaVu Sans 粗体和其他类型存在,但仅存在"普通"一个被发现。以下是我的fonts文件夹中的一小部分字体(这些字体位于Qt文件夹中,用于发布和调试):

couri.pfa
cour.pfa
cursor.pfa
dejavu_sans_11_50.qpf2
DejaVuSans-BoldOblique.ttf
DejaVuSans-Bold.ttf
DejaVuSansMono-BoldOblique.ttf
DejaVuSansMono-Bold.ttf
DejaVuSansMono-Oblique.ttf
DejaVuSansMono.ttf
DejaVuSans-Oblique.ttf
DejaVuSans.ttf
DejaVuSerif-BoldOblique.ttf
VeraMono.ttf
VeraSeBd.ttf
VeraSe.ttf
Vera.ttf
  1. 什么是 fontdir 文件,我是否需要它以及如何创建它?

  2. 如果Qt找到我安装的所有字体,我该怎么做?

  3. 有没有办法简单地使用我感兴趣的字体副本并将其放入我的应用程序的子目录中,将其视为一个图标,以便我不必乱用所有系统位置?

  4. 编辑:根据此thread我认为我也不支持TTF字体。我查看了我的字体,看起来找到了所有* .qpf和* .qpf2字体。所以我会尝试将我的TTF转换为QPF。

1 个答案:

答案 0 :(得分:1)

  

什么是fontdir文件,我是否需要它以及如何创建它?

仅当使用QPF字体时才需要此文件,这是Qt特定的"轻量级"格式。 Qt工具makeqpf使用该文件(据我所知)。

  

我必须做什么才能让Qt找到我安装的所有字体?

如果使用 -no-freetype 编译Qt,则不能使用任何TTF字体,因此 QFontDatabase 找不到。要启用TTF支持,必须编译Qt而不使用此编译配置标志。我重新编译了它,找到了 /usr/local/Trolltech/QtEmbedded-4.8.6-x86-dbg/lib/fonts 中的所有字体。

  

有没有办法简单地使用我感兴趣的字体的副本并把它   进入我的应用程序的子目录,将其视为一个图标   我不必乱用所有的系统位置?

是。人们可以简单地使用 QFontDatabase :: addApplicationFont ,这对于支持的字体格式不会失败。

请注意,我决定重新编译Qt,因为我不想使用Qt中的makeqpf工具,它可以用来将TTF字体转换为QPF格式。