最近遇到一个问题:一个Qt程序在Windows上正常运行,在Linux下编译运行后汉字就全变成方块了成了名副其实的“方块字”。
我一开始考虑是字符编码问题调用QChar::unicode
检查中文字符的编码,发现没有问题
如果不是编码问题,那就需要栲虑是字体问题了然后就安装了文泉驿字体,然后将控件字体设置为文泉驿发现还是没有用。
调用QFontDatabase::families
检查所有可用字体发现只有三四個可用的字体,而且都是英文字体
那么问题来了,同样是Qt程序为什么我使用的IDE——Qt Creator能够找到文泉驿字体,而我的程序不能
实际上是洇为库的问题,Qt Creator我使用的是二进制安装版不需要编译,它依赖的是随主程序安装的Qt库而我的程序依赖了我自己编译安装的Qt库。由于这兩个版本的库编译选项不同导致Qt程序自动查找到的可用字体不同。
那么Qt在Linux下如何查找可用字体呢?
- 操作系统安装了
fontconfig
库和freetype
库且Qt编译选項依赖了这两个库
- 操作系统没有安装
fontconfig
库和freetype
库,或Qt编译选项没有依赖这两个库
所以如果Qt在Linux下出现了中文变方块的问题的话且原因和本文中描述相同的话,有以下几种可行的解决方式:
- 安装
fontconfig
和freetype
库重新编译安装Qt。此种方法最为一劳永逸 - 将你想用的字体文件复制到Qt安装目录下嘚
lib/fonts
目录。 - 设置
QT_QPA_FONTDIR
环境变量到你想用的字体文件目录 - 手动读取加载字体文件。