Qt在Linux下如何查找可用字体

40 篇文章 1 订阅
27 篇文章 3 订阅

最近遇到一个问题:一个Qt程序在Windows上正常运行,在Linux下编译运行后汉字就全变成方块了,成了名副其实的“方块字”。

我一开始考虑是字符编码问题,调用QChar::unicode检查中文字符的编码,发现没有问题。

如果不是编码问题,那就需要考虑是字体问题了。然后就安装了文泉驿字体,然后将控件字体设置为文泉驿,发现还是没有用。

调用QFontDatabase::families检查所有可用字体,发现只有三四个可用的字体,而且都是英文字体。

那么问题来了,同样是Qt程序,为什么我使用的IDE——Qt Creator能够找到文泉驿字体,而我的程序不能?

实际上是因为库的问题,Qt Creator我使用的是二进制安装版,不需要编译,它依赖的是随主程序安装的Qt库。而我的程序依赖了我自己编译安装的Qt库。由于这两个版本的库编译选项不同,导致Qt程序自动查找到的可用字体不同。

那么,Qt在Linux下如何查找可用字体呢?

有两种情况:

  1. 操作系统安装了fontconfig库和freetype库,且Qt编译选项依赖了这两个库

这种情况下Qt使用了platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp文件中的void QFontconfigDatabase::populateFontDatabase()函数,依赖fontconfig库来查找字体文件,所以/usr/share/fonts下的字体都能找得到,Qt程序也就可以正常使用这些字体了。

  1. 操作系统没有安装fontconfig库和freetype库,或Qt编译选项没有依赖这两个库

这种情况下Qt会使用gui/text/qplatformfontdatabase.cpp文件中的void QPlatformFontDatabase::populateFontDatabase()函数来自行查找字体。如果你设置了QT_QPA_FONTDIR环境变量,那么Qt会在环境变量这个路径中查找可用字体;如果未设置环境变量,则会在Qt安装目录下的lib/fonts目录下查找可用字体。

所以如果Qt在Linux下出现了中文变方块的问题的话,且原因和本文中描述相同的话,有以下几种可行的解决方式:

  1. 安装fontconfigfreetype库,重新编译安装Qt。此种方法最为一劳永逸。
  2. 将你想用的字体文件复制到Qt安装目录下的lib/fonts目录。
  3. 设置QT_QPA_FONTDIR环境变量到你想用的字体文件目录。
  4. 手动读取加载字体文件。
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值