天天看点

QT下添加字库支持

QT版本:QT5.3.1,运行在Ubuntu14.04(这个无关紧要)

编译好的QT程序在ARM-linux设备下运行,查看是否支持需要的字体类型,如果不支持则添加。

1、确认当前设备下(文件系统)下都支持哪些字体类型,是否有需要的字体类型。

在QT下,可以通过API函数查询当前已经支持的字体类型,源码如下:

#include <qfontdatabase.h>
#include <qdebug.h>


void MainWindow::on_pushButton_clicked()
{
    QFontDatabase database;

    foreach (const QString &family, database.families())
    {
        qDebug()<<family;
    }

    qDebug()<<"\r\n now is chinese font. \r\n";
    //下面为支持简体中文字体库
    foreach (const QString &family, database.families(QFontDatabase::SimplifiedChinese))
    {
        qDebug()<<family;
    }

}
           

编译执行,可以查看当前设备支持字体库;

2、没有需要的字体类型,下载并添加字体库到设备下。

如果列表下没有想要的字体或者不全,则需要添加字体库,我的设备当前字体库文件放在了“/opt/qt-4.8.5/lib/fonts”目录下,文件格式分别为.ttf,.qpf,.pfb,.pfa格式。第一步打印出来的是从这些字体库中读到的,而非字体库名字。

比如要添加“微软雅黑”字体库,在网上搜索到字体库并下载(字体库通用,大小不一样只是支持程度不一样),比如下载的微软雅黑字体库名称为“msyh.ttf”,将字体库拷贝到设备字体库目录,执行第一步生成的程序,可以发现,列表下多了“Microsoft YaHei”一行,说明当前字体库添加进去了。

3、验证是否可以正常使用以及添加字体库效果。

可以不管QT测试程序怎么输入字体(我使用的QT5.3.1版本,一直不能输入中文,且确定输入法没有问题,想显示中文,只能复制粘贴。同事使用的QT5.9.1就可以直接输入中文),在mian.cpp下mian函数中添加如下语句:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QFont font;
    font.setPointSize();
    //注意,这里不是字体库名称msyh,而是读取到的Microsoft YaHei
    font.setFamily("Microsoft YaHei");
    a.setFont(font);

    MainWindow w;
    w.show();

    return a.exec();
}
           

执行后,在界面下查看,确实显示的为微软雅黑字体。

(为了方便区分,可以同时添加微软雅黑,宋体,Arial,查看字母 J 的写法,可以对比出来)。

4、至此确认,如果要支持某种字体,只需要将对应的字体库添加到设备的字体库中即可。

继续阅读