前言
Qt中加入字体是一个很常见的需求,实现方法也不唯一,笔者记录下常用的几种方法
一、导入字体的常见需求
1.为显示中文
一些特别的平台发布时,平台本身是没有安装中文字体的,此时只想导入一种中文字体,以显示中文。
如android、WebAssembly、linux系统,经常会缺少中文字体
2.为显示特殊符号
在某些条件受限时,经常无UI设计的图标,此时可以使用图标字体。很多工具或平台都支持,将已有的图标导入到字体文件中,使用时和字体相同,只是显示的是图标,如Fontello - icon fonts generator
3.其他
其他情况就不解释了,大部分是功能上的需求。
二、常见使用方法
1.从C++中导入
Qt中有现成的导入函数:QFontDatabase::addApplicationFont()
只要把字体文件导入就可以了
QFontDatabase::addApplicationFont(QStringLiteral(":/font/HarmonyOS_Sans_SC_Black.ttf"));
导入后,可以在需要用到的地方,直接将QFont的family属性设置成对应名字就可以。
若是需要设置为默认字体,可以在main()函数中,添加如下代码
int fontId = QFontDatabase::addApplicationFont(QStringLiteral(":/font/HarmonyOS_Sans_SC_Black.ttf"));
QStringList fontFamilies = QFontDatabase::applicationFontFamilies(fontId);
qDebug()<<"fontfamilies:"<<fontFamilies;
if (fontFamilies.size() > 0)
{
QFont font;
font.setFamily(fontFamilies[0]);//设置全局字体
app.setFont(font);
}
2.从qml中导入
qml提供了FontLoader类型,用于处理字体导入,只需将字体文件的位置赋给source属性就可以了。使用也很简单,FontLoader类型提供了font和name属性,在需要用到的地方,直接使用就可以。
FontLoader {
id: fontLoader
source: "file:fonts/HarmonyOS_Sans_SC_Black.ttf"
}
注:字体文件来源、大小 路径
三、注意事项
1.字体文件可放在资源文件中,也可以在绝对路径或相对路径。
笔者建议,若是桌面程序,字体文件在应用程序打包时放入,使用绝对路径;若是移动或web程序,建议放入资源文件中
2.不少字体文件有版权限制,商用时要注意下
3.不建议直接使用相对路径中的“.”,若是通过快捷方式启动的程序,“.”是快捷方式所在目录,不是应用程序的实际目录
4.若有必要,可以对指定字体进行裁剪,以减少字体大小。若字体确实很大,使用qmake可以在.pro文件中添加
CONFIG += resources_big
后记
以上只是笔者记忆里的东西,若有缺少,后补充吧。