【问题标题】:Qt : Unable to load TTF fileQt:无法加载 TTF 文件
【发布时间】:2011-10-27 23:56:41
【问题描述】:

我有一个在 OpenSuse 11.4 中开发的 Qt 嵌入式应用程序,我需要在其中加载一个 TTF 字体文件。但是,当我调用int QFontDatabase::addApplicationFont() 函数时,它会返回-1

阅读文档后,我发现目前不支持在没有 fontconfig 的 Unix/X11 平台上添加应用程序字体。

我通过 YaST 检查了我是否安装了 fontconfig,并且它已安装 - 但我认为这不相关,因为我使用的是 qt 嵌入式库。我想我必须让 fontconfig 支持 qt-embedded 库,但我该怎么做呢?

fontconfig 甚至支持 qt-embedded 吗?谁能告诉我发生了什么事?

【问题讨论】:

  • 你能用“fc-list”命令确认你的字体实际上是由fontconfig列出的吗?
  • 如果它不在列表中怎么办?下一步是什么? :)
  • 在列表中找到合适的字体,或者从 yast 安装字体。您甚至可以将字体路径添加到正在运行的 X 并使用 xrdb 重新加载它。所以 man xset 和 man xrdb 会告诉你细节。
  • 顺便说一句,我正在使用 4.5.3 qt 嵌入式库构建这个应用程序。而不是 OpenSuse 中预装的 QT。
  • 如果不在列表中则qt无法加载!明确记录了 QT 使用 fontconfig 数据库来加载字体。我认为使用 qt-embedded 没有任何区别。

标签: c++ qt truetype opensuse fontconfig


【解决方案1】:

您可以使用 QPA 或 Qt Platform Abstraction(以前称为 Lighthouse)。您需要创建一个 QPlatformIntegration 的实现(可以作为插件制作或直接使用),它公开了一个自定义 QPlatformFontDatabase。这里的诀窍是重用 Qt 的大部分现有实现 QFontconfigDatabase(它是 QBasicUnixFontDatabase 的子类)。

这正是我们用于 PhantomJS 的技术,因此它可以在 Linux 上使用 headlessly(没有 X11),同时仍然利用 Fontconfig(因此也使用 FreeType)进行文本渲染。

不幸的是,我认为 Qt 4.5 太旧而无法运行 Lighthouse。要么迁移到官方支持 QPA 的 4.8,要么尝试向后移植 Lighthouse。

【讨论】:

    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2017-11-28
    • 2012-12-13
    相关资源
    最近更新 更多