有时候我们需要在Linux上自己编译Qt,但是发现编译出来的Qt中文显示有问题或者中文全变成方块了,那么大概率是在编译Qt的configure步骤中没有加入-fontconfig选项。如果没有加入fontconfig选项,Qt会使用freetype来查找字体,查找目录为环境变量QT_QPA_FONTDIR设置的,如果没有设置的话就是从QLibraryInfo::LibrariesPath的fonts目录(比如-prefix 是/usr/local/Qt5.9.8,那么目录就是/usr/local/Qt5.9.8/lib/fonts)下查找。
QString QPlatformFontDatabase::fontDir() const
{
QString fontpath = QString::fromLocal8Bit(qgetenv("QT_QPA_FONTDIR"));
if (fontpath.isEmpty())
fontpath = QLibraryInfo::location(QLibraryInfo::LibrariesPath) + QLatin1String("/fonts");
return fontpath;
}
针对上面这一种情况,可以设置环境变量也可以使用把字体拷贝到Qt目录下的lib/fonts下。另外一种就是重新编译Qt,在configure的时候加入-fontconfig,需要保证系统安装了fontconfig和freetype库,Qt才能检测到。Ubuntu/Debian系列如下:
sudo apt install libfontconfig1-dev libfreetype6-dev
这个版本的Qt就会在/usr/share/fonts下面查找字体,也就是系统的字体。