Qt 添加第三方字体库

        Qt字体库默认主持操作系统所有的字体库,但是设计师一般喜欢比如思源字体,但是咱们的操作系统没有安装,在其他没有安装第三方字体库的电脑上运行,就达不到设计师最初设计的观感。这篇博客介绍Qt如何第三方字体库,以思源字体为例介绍。

ESP8266

一、下载字体库

        csdn下载地址: 思源字体库下载地址.otf格式

零基础

二、添加字体库

项目组合管理

三、QFontDatabase概述

QFontDatabase类提供了关于底层窗口系统中可用字体的信息。

生成对抗网络

详细资料请参看Qt官网:QFontDatabase Class – Qt 3.0.5 Documentation

makefile

1、获取系统所有字体族信息

矢量控制

QFontDatabase database;
foreach (const QString &strFamily, database.families()) {
	qDebug()<<strFamily.toStdString().c_str();
	foreach (const QString &strStyle, database.styles(strFamily)) {
		QString strSizes;
		foreach (int points, database.smoothSizes(strFamily, strStyle))
			strSizes += QString::number(points) + " ";
		qDebug()<<"\t"<<strStyle.toStdString().c_str()<<"\t"<<strSizes.toStdString().c_str();
	}
}

2、给应用程序添加可使用的字体

pyqt5

int QFontDatabase::addApplicationFont(const QString &fileName)

从fileName指定的文件中加载字体,并使其对应用程序可用。返回一个ID,可以用removeApplicationFont()再次删除字体,或者检索字体中包含的姓氏列表。如果字体无法加载,则函数返回-1。

剪枝

QStringList QFontDatabase::applicationFontFamilies(int id)

返回由id标识的给定应用程序字体的字体族列表。

自动化测试

四、组织代码

#include "widget.h"
#include "ui_widget.h"

#include <QFontDatabase>
#include <QDebug>

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);

    setFont(&(ui->boldBtn), ":/font/SourceHanSansCN-Bold.otf");
    setFont(&(ui->ExtraLightBtn), ":/font/SourceHanSansCN-ExtraLight.otf");
    setFont(&(ui->heavyBtn), ":/font/SourceHanSansCN-Heavy.otf");
    setFont(&(ui->LightBtn), ":/font/SourceHanSansCN-Light.otf");
    setFont(&(ui->MediumBtn), ":/font/SourceHanSansCN-Medium.otf");
    setFont(&(ui->NormalBtn), ":/font/SourceHanSansCN-Normal.otf");
    setFont(&(ui->regularBtn), ":/font/SourceHanSansCN-Regular.otf");
}

Widget::~Widget()
{
    delete ui;
}

void Widget::setFont(QPushButton **push, QString fontPath){
    int loadedFontId = QFontDatabase::addApplicationFont(fontPath);
    QStringList loadedFontFamilies = QFontDatabase::applicationFontFamilies(loadedFontId);
    for(int i =0 ; i < loadedFontFamilies.size() ; i++){
        QString sansCNFamily = loadedFontFamilies.at(i);
        if(i == 0 ){
            QFont defaultFont = (*push)->font();
            //设置字体大小格式为pixel,字体占用固定像素。相同像素的大小屏,不会发生字体遮挡现象
            defaultFont.setFamily(sansCNFamily);
            defaultFont.setPixelSize(15);
            (*push)->setFont(defaultFont);
        }

        qDebug()<<"defaultFont:" << sansCNFamily ;
    }
}

运行结果:

dumpbin

        

CDC

以上代码只是在为了测试Qt如何加载第三方字体,但是在开发过程当中不建议这样使用。直接在main函数中去添加整个软件的字体,控件只是设置字体大小即可,代码如下:

Numpy学习

#include <QApplication>
#include <QStandardPaths>
#include <QDesktopWidget>
#include <QTranslator>
#include <QTextCodec>

void setDefaultFont(QApplication *app){
    int loadedFontId = QFontDatabase::addApplicationFont(":/config/font/SourceHanSansCN-Normal.otf");
    QStringList loadedFontFamilies = QFontDatabase::applicationFontFamilies(loadedFontId);
    for(int i =0 ; i < loadedFontFamilies.size() ; i++){
        QString sansCNFamily = loadedFontFamilies.at(i);
        if(i == 0 ){
            QFont defaultFont = (app)->font();

            //设置字体大小格式为pixel,字体占用固定像素。相同像素的大小屏,不会发生字体遮挡现象
            defaultFont.setFamily(sansCNFamily);
            defaultFont.setPixelSize(15);
            (app)->setFont(defaultFont);
        }

        qDebug()<<"defaultFont:" << sansCNFamily ;
    }
}

int main(int argc, char **argv)
{
#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);
#endif

    QApplication app(argc, argv);

 
    setDefaultFont(&app);

    loginView login;

    login.show();
    return app.exec();
}

这样就为系统设置好了默认字体。

俄罗斯方块

五、未解决的问题

思源字体也确实好看,但是在使用的过程中也发现了比较奇怪的问题,字体有些稍微浅一些,字体颜色不太均匀,至今未解决,希望看到朋友在评论区一起探讨!

教程

图像配准

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注