Qt同时使用多种字体

Qt同时使用多种字体,qt,fonts,embedded,Qt,Fonts,Embedded,我想在我的软件中使用三种字体: FontA:包含拉丁、希腊和希腊文字 FontB:包含韩语字符 FontC:包含日文、中文字符 这些字体没有重叠 我想设置我的应用程序,以便同时使用所有这些字体,因为在我的软件中,来自不同语言的字符可能出现在同一上下文中 如果在FontA中找到字符,请使用它。否则,请查看FontB,如果找到,请使用它。将FontC视为最后手段,如果找到了,就使用它,否则什么也不做 我如何设置Qt以实现这种功能 (我的环境是嵌入式linux,Qt 4.8) 注意:我试过QFon

我想在我的软件中使用三种字体:

  • FontA:包含拉丁、希腊和希腊文字
  • FontB:包含韩语字符
  • FontC:包含日文、中文字符
这些字体没有重叠

我想设置我的应用程序,以便同时使用所有这些字体,因为在我的软件中,来自不同语言的字符可能出现在同一上下文中

如果在FontA中找到字符,请使用它。否则,请查看FontB,如果找到,请使用它。将FontC视为最后手段,如果找到了,就使用它,否则什么也不做

我如何设置Qt以实现这种功能

(我的环境是嵌入式linux,Qt 4.8)

注意:我试过QFont::insertSubstitution,但它是在系统上没有安装FontA的情况下使用的,因此对我的情况没有帮助。

P.P.S.:将这些字体合并为一种字体是不可能的,因为它们是适当的字体。

就像其他人所说的那样–如果您的QT版本使用fontconfig通过fontconfig执行,它的唯一功能就是管理智能字体子状态。如果你的版本没有使用fontconfig,那你就太倒霉了,因为我怀疑现在fontconfig已经广泛使用,是否有人花了太多时间让它正常工作。

尝试使用这种方法:

它可以同时使用多种语言(西里尔语、欧洲语、泰语、日语等)

  • 将Droid字体(不需要,它也可以与其他字体一起使用)放入Qt可以找到它的目录中
  • 导出特殊环境变量:
    Export QWS\u NO\u SHARE\u font=1
  • 使用
    -fn“Droid Sans”
    参数运行应用程序

Qt有一个用于此类情况的后备机制。 在中,我发现您可以自定义此回退机制。看起来很有希望,应该能解决你的问题

在Qt5中,我没有看到指向
QPlatformFontDatabase
类的直接链接。只有看起来你应该写一些插件。 同样,它应该在Qt5中起作用。由于某些原因,没有Qt5的相关文档


您应该试试看,或者至少选择一个源。

您可以在运行时组合字体并将其传递到,这样您就不会分发组合字体(IANAL)了吗?您查看了fontconfig手册了吗?如果找不到字体中的某个标志符号,您应该能够配置系统范围(或每个用户)的回退。该功能在Qt中称为“字体回退”,如果使用fontconfig,该功能应该可以工作。(但不知道配置详细信息)。Qt中有非fontconfig情况的代码,但它目前似乎已被破坏(从qt5.1/5.2开始),我认为您没有抓住要点。我不需要“字体回退”,我需要“字形回退”。Fontconfig支持字体回退,但glyph回退必须在应用程序级别处理。@ratchetfreak我认为这不是一个简单的方法。我必须解析每个字体文件,并将它们合并成一个ttf格式的数据,然后将其传递给Qt,这在我看来是一项艰巨的工作。我们的Qt版本不使用fontconfig,不幸的是,所有的建议都依赖于它。需要明确的是,fontconfig可以在glyph的基础上实现这一点,对吗?还有,有人能给我举一个好的例子来说明如何进行字形替换吗?我找不到一个:(Fontconfig比这聪明得多,它有一个数据库,其中包含大多数常见语言环境所需的代码点,如果当前字体不足以显示请求的文本,它将自动替换适合给定语言环境的字体。您可以配置字体优先级、特定于语言环境的覆盖等。因此,它不仅可以替换,而且可以t将尽量避免每两个字母切换一次字体(就像大多数天真的替换引擎一样)。它非常完整,但您确实需要阅读提供的示例规则集来了解它的工作原理。我明白了,问题是我们当前的Qt配置不使用fontconfig,使用fontconfig部署它将花费我很多时间,因此我希望在尝试之前确保可以完成。您能给我指出一个使用fontconfig的示例吗你提到什么了?