最近换了项目里的字体,所以整理一下qt设置字体相关的一点内容,
主要包括:
1、查看当前系统里所有字体的名称
2、添加路径下的字体库
3、使用字体库
一、查看当前Qt所有字体的名称
为什么要查看字体名称呢? 因为设置字体的时候,setFamily()的参数时是字体名称,所以我们要先知道字体的名称,然后才能通过setFamily()去使用该字体。
1、qt C++下查看
使用 QFontDatabase 的families(),返回值是一个QStringList类型,里面包含所有字体的名称;
打印字体名称的代码如下;
若想看字体显示效果,可以做个界面,然后用QFont的setFamily(QString fontName)把text的设置为该字体看效果;
#include <QDebug>
#include <QFontDatabase>
QFontDatabase fdb;
QStringList fontList = fdb.families();
for(int i = 0; i < fontList.size(); i++){
qDebug() << "font name" << i << ": " << fontList.at(i);
}
2、qml下查看
qml里的 Qt.fontFamilies()和上面QFontDatabase::families()一样,都是返回一个字体名称的QStringList,刚好可以用来做ListView的模型,所以我们把字体显示出来看效果,代码和效果图下。
Item {
width: 960; height: 540
ListView{
anchors.fill: parent
model: Qt.fontFamilies()
delegate: Item {
height: 64
width: parent.width
Rectangle{
height: 48
width: parent.width
Text {
id: txtShow
anchors.centerIn: parent
color: "black"
text: "字体名称" + index + ": " + modelData
font.family: modelData
}
}
}
}
}
二、路径下添加字体库
若不满意上面的字体,怎么办呢?那就得自己找字体库,一般是ttf格式,
1、把字体库放到qt的安装目录下的lib/fonts文件夹中,再通过第一步找到该字体名称,使用该字体。
2、但是如果我为了方便打包和管理,想把字体库放在项目文件夹里,该怎么办呢?
假设字体库文件名是song.ttf,绝对路径是 /work/tftpboot ,下面一行代码就能把该字体加入Qt字体中来,接着通过第一步找到该字体的名称,就能使用它了。 帮助文档里说这函数成功会返回一个id失败返回-1,但我试了只是成功返回0,失败返回-1,0并不是这个字体的id。
QFontDatabase::addApplicationFont("/work/tftpboot/song.ttf");
三、使用字体库
名称找到,那就该用起来了
1、全局使用 main.cpp:
QApplication app(num, param);
QFont font;
font.setFamily("DejaVu Sans Mono");
app.setFont(font);
2、qml里
Text {
text: "字体名称"
font.family: "DejaVu Sans Mono"
}
除了通过名称,还可以通过字体的id来使用,但因为addApplicationFont()这个函数不知道咋整,所以也不知道怎么整比较好。