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

一、下载字体库

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

二、添加字体库

三、QFontDatabase概述

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

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

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、给应用程序添加可使用的字体

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 ;}
}

运行结果:

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

#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);
#endifQApplication app(argc, argv);setDefaultFont(&app);loginView login;login.show();return app.exec();
}

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

五、未解决的问题

思源字体也确实好看,但是利用上面方法添加字体库之后,有些界面不生效,想请教各位网友如何解决,可以在评论区讨论

Qt 添加第三方字体库相关推荐

  1. iOS 添加第三方字体库

    iOS 加载第三方字体库 | 浏览:2096 | 更新:2014-09-24 20:26 1 2 3 4 5 分步阅读 一键约师傅 百度师傅高质屏和好师傅,解救你的碎屏机 工具/原料 第三方字体库文件 ...

  2. 自定义TextView支持第三方字体库(以隶书为例)

    下载地址: http://download.csdn.net/download/jackwolf_gao/4973584 描述:自定义TextView支持第三方字体库(以隶书为例) 思路: 1,将字体 ...

  3. uniapp微信小程序引入第三方字体库

    前言 最近在使用第三方字体库,然后发现使用uniapp做小程序时引入第三方字体库有着挺多坑,收集了一些网上的资料,我大概整理下,防止以后继续踩坑 这是uniapp官网的引入字体图标方法 字体引入 从c ...

  4. Swift 引入第三方字体库

    引入第三方字体库 为了达到好的效果展现,我们往往会引入第三方字体库,以使我们工程中的字体展示达到最佳,这方面可能对于阅读之类的APP会用到的更多. 在这里也是随便从网上下载的一个字体,名为经典隶书变体 ...

  5. java使用第三方字体库的方法,使用第三方ttf/ttc等字体库的方法

    java使用第三方字体库的方法,使用第三方ttf/ttc等字体库的方法 有时候我们在程序中,会使用到Java字体,但不是所有的字体系统中都会有,我们就可能会使用外部自定义字体,这样在程序迁移部署中就会 ...

  6. 记一次vue使用*.ttf第三方字体库字体

    首先去下载一个字体库文件,*.ttf 文件 先预览一下字体在字体库里边的样子 注意:注意上图右侧圈出来的信息,如:字体名称,一会儿要用到 将下载下来的 ttf 文件放入项目里边 在 同级 新建 fon ...

  7. iOS 添加第三方字体 .ttf

    iOS中如果要使用一些第三方字体(.ttf格式) 我们可以直接添加 具体方法如图 在info.plist 的information Propert List下添加 Fonts provided by ...

  8. java 中文字体_Linux 添加中文字体库,解决Java 生成中文水印不显示问题

    本机 Windows 环境测试以下代码生成中文水印完全没问题,但是发布到Linux下不显示,一开始以为是报错了没打印出来,搜索发现直接提示中文乱码的或者不显示的,才明白原来是字体库原因,于是开始解决这 ...

  9. linux添加中文字库主线任务,Linux 添加中文字体库

    背景:润乾报表 win上面的项目直接上传到linux 上,但预览&下载报表时乱码 如果含有斜线的单元格或统计图的报表在网页上发布时,统计图或斜线单元格里的汉字会变成小方框,此时往往是服务器端操 ...

最新文章

  1. priority queue
  2. python语言的理解-终于明白python语言的特点是什么
  3. python引用传递的区别_python的值类型和引用类型及值传递和引用传递的区别
  4. python 删除文件、目录_python脚本删除文件及删除文件目录的方法
  5. android studio 错误: 找不到符号 符号: 方法 xxx() 位置: 类 xxx
  6. 一个列中多行求和_excel表格制作,Excel表格的基本操作,包含制作一个表格10方面的知识(1)...
  7. 都9012了,这几个公众号你还没关注?
  8. ColorMatrixFilter 色彩矩阵滤镜
  9. 贪心算法无重叠区间c语言,贪心算法之区间问题.md
  10. Android/Linux之procrank查内存工具
  11. 数据库创建索引的规则
  12. ichariot测试路由器有线转发性能
  13. MATLAB信号处理---学习小案例(5)---信号波形的产生
  14. 程序员表白技巧:程序员木讷? 我反手就是一串代码
  15. 坚持整洁亦或拥抱混乱——新书《混乱: 改变我们生活的无序力量》解读
  16. 特征频率、最y大振荡频率、截止频率有什么关系和异同
  17. python爬取所有页url_Python 如何爬取相同url下,多个页面的链接内容
  18. Dbeaver链接hive和impala
  19. 'Connection aborted.', BadStatusLine('\x15\x03\x01\x00\x02\x02\x16',)
  20. XILINX FPGA+RK3399 PCIE X4

热门文章

  1. 3ds Max 材质贴图
  2. 学 Python 和学 Java ,哪个好找工作?
  3. 酷睿i5 12500H相当于什么水平 i512500H属于哪个档次
  4. Android工程师进阶第一课 夯实Java基础 JVM内存模型和GC回收机制
  5. 深圳计算机专业中专学校,深圳中专学校
  6. python作用域的理解-python中对变量的作用域LEGB、闭包、装饰器基本理解
  7. python图片转pdf
  8. Mysql5.7 windows 下压缩包方式安装以及环境配置
  9. Nginx 访问加密
  10. 【Excel实战】--目录及链接