Qt Qml 查看所有字体、添加字体库、使用字体库的方法

最近换了项目里的字体,所以整理一下qt设置字体相关的一点内容,
主要包括:
1、查看当前系统里所有字体的名称
2、添加路径下的字体库
3、使用字体库

一、查看当前Qt所有字体的名称

为什么要查看字体名称呢? 因为设置字体的时候,setFamily()的参数时是字体名称,所以我们要先知道字体的名称,然后才能通过setFamily()去使用该字体。
1、qt C++下查看
使用 QFontDatabase 的families(),返回值是一个QStringList类型,里面包含所有字体的名称;
打印字体名称的代码如下;
若想看字体显示效果,可以做个界面,然后用QFont的setFamily(QString fontName)把text的设置为该字体看效果;

#include 
#include 
	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
                    }
                }
            }
        }
    }

Qt Qml 查看所有字体、添加字体库、使用字体库的方法_第1张图片

二、路径下添加字体库

若不满意上面的字体,怎么办呢?那就得自己找字体库,一般是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()这个函数不知道咋整,所以也不知道怎么整比较好。

你可能感兴趣的:(Qt)