在qt项目中使用外部第三方字体库字体

2023-11-14


一、第三方字体库字体

在项目开发中,有时候我们可能会由于某些原因会用到qt所提供的字体库之外的字体,这个时候就不可以直接设置字体了,需要做一些操作才行。比如我想使用 “阿里巴巴普惠体” 这个字体。

二、使用方法

1、直接代码添加

在 Qt 中,可以使用 QFontDatabase 类来加载和使用除 Qt 字体库之外的字体。QFontDatabase 提供了一些方法,用于获取系统中已经安装的字体信息,以及加载自定义字体文件。

以下是一个示例代码,演示如何使用 QFontDatabase 加载自定义字体文件:

#include <QApplication>
#include <QFontDatabase>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    // 加载自定义字体文件
    int fontId = QFontDatabase::addApplicationFont(QCoreApplication::applicationDirPath() + "/Resource/fonts/Alibaba-PuHuiTi-Medium.ttf");
    
    // 获取字体族名称
    QString fontName = QFontDatabase::applicationFontFamilies(fontId).at(0);
    
    // 使用自定义字体
    QFont font(fontName, 12);
    QApplication::setFont(font);
    
    // ...
    
    return app.exec();
}

在上面的示例代码中,首先使用 QFontDatabase::addApplicationFont 方法加载自定义字体文件,返回字体 ID。然后通过 QFontDatabase::applicationFontFamilies 方法获取已加载字体文件的字体族名称,并使用 QFont 设置字体族名称和字体大小。最后使用 QApplication::setFont 方法设置默认字体为自定义字体。

在加载字体文件时,需要注意以下几个细节:

  • 字体文件必须是字体格式文件,例如 .ttf、.otf 等,否则可能无法加载成功。
  • 如果要在 Qt 应用程序中使用已安装的字体文件,可以使用 addApplicationFontFromData() 方法,该方法接受一个字节数组作为参数,可以从字体文件读取数据并加载字体。
  • 加载的字体文件将在应用程序退出时自动卸载,不需要手动卸载。
  • 需要注意的是,如果在应用程序中使用了 Qt Style Sheets (QSS),则可能会覆盖默认字体设置。在这种情况下,需要在 QSS 中明确指定要使用的字体。可以使用 font-family 属性来指定字体名称。

2、使用QSS进行添加

  • 要使用的字体直接安装在操作系统中,字体文件 “.otf” 或者 “.ttf” 进行安装在这里插入图片描述

    查找安装的字体可以通过 设置 – 控制面板 – 字体 进行查看已经安装的系统字体

    然后在qss中使用font-family来指定名称进行设置:

    QPushButton
    {
    	/*阿里巴巴普惠体*/
    	font-family: "Alibaba PuHuiTi";
    }
    
  • 如果不想把字体安装到操作系统中也是可以的,利用 QFontDatabase::addApplicationFont 方法加载自定义字体文件,然后在qss中利用font-family属性直接按名称设置,例如:

    // 加载外部字体文件
    QFontDatabase::addApplicationFont(QCoreApplication::applicationDirPath() + "/Resource/fonts/Alibaba-PuHuiTi-Medium.ttf");
    
    // 在 QSS 中使用外部字体
    QString styleSheet = "QWidget { font-family: '" + Alibaba PuHuiTi + "'; }";
    qApp->setStyleSheet(styleSheet);
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在qt项目中使用外部第三方字体库字体 的相关文章

随机推荐

  • NodeJS的os模块

    附录 常用HTTP响应头和请求头信息对照表 Node简介 第一个node程序 module 模块系统 npm包管理器 模块系统优先级 认识http内置模块 url内置模块 path内置模块 fs内置模块 http模块服务端进阶 http报文
  • 区块链学习笔记(四)【Merkle树】

    一 字典树 字典树的三个基本特征 1 根节点不包含字符 为空 除根节点外每一个节点只包含一个字符 2 从根节点到某一个节点 路径上经过的字符连接起来 就是该节点对应的字符串 3 每个节点包含的所有子节点的字符都不相同 优势 相比较于哈希表
  • 云计算基础教程(第2版)笔记——基础篇与技术篇介绍

    文章目录 前言 第一篇 基础篇 一 绪论 1 1 云计算的概念以及特征 1 1 1云计算的基本概念 1 1 2云计算的基本特征 1 2 云计算发展简史 1 3 三种业务模式介绍 1 基础设施即服务 IaaS 2 平台即服务 PaaS 3 软
  • leetcode-每日一题2022.3.17 词典中最长的单词

    题目 力扣 思路 模拟 先把words中的字符串放到哈希表里 再遍历words的每一个字符串 判断它从0开始的每一个子串是否存在于哈希表里 代码 class Solution public string longestWord vector
  • 【验证小白】只有SV+modelsim学验证(4)——想办法合理的结束仿真后,准备好了所有代码

    前言 把checker加入到环境中后 环境组件基本就搭建完成了 试着跑了跑出了发现之前的pkt data有一些问题外 还发现仿真结束机制太不合理了 过于简单粗暴 于是把结束仿真的行为梳理一下 做的更合理一些 参考了VMM的思路 做一个漏洞百
  • nginx只允许域名访问的配置方法(ngnix禁止IP访问的配置方法)

    1 只允许域名访问的配置方法一 修改配置文件 判断是否用域名访问 server listen 8081 server name www tq com if host www tq com return 403 2 只允许域名访问的配置方法二
  • HCIP第十一次作业-MPLS

    实验要求及拓扑图 第一步 配IP地址 按要求1配就行 第二步 在R2 R7上起OSPF协议 并把用户环回口改为广播 查看表 第三步 在R2 R7上起MPLS协议 查看表 第四步 在R2 R5 R7上起BGP协议且建邻 在华为设备上还要开启
  • 61-C语言-小猴吃桃问题

    问题 猴桑第一天兴高采烈地采了好多桃子 并且吃了一半 太好吃了 然后又多吃了一个 第二天又吃了一半多一个 以此类推 到第十天的时候 再想吃的时候就剩下1个桃子了 那么请问 第一天猴桑摘了多少桃子 思路 跟做数学题一样 先提取有用条件 1 到
  • 光功率和光衰的单位_太阳能照明的功率、流明与照度的计算方法

    今天小编来给大家聊一聊太阳能照明应用中的一些实际问题 我们经常会收到这样的问题 我的院子100个平方 要选多大功率的太阳能灯 分别要多少个才够亮 本公司印度某地工程项目 这里有一个比较简单的估算公式推荐给大家 首先我们确定自已想要达到一个什
  • python怎么装_python如何安装pickle

    pickle是python语言的一个标准模块 安装python后已包含pickle库 不需要单独再安装 pickle模块实现了基本的数据序列化和反序列化 推荐学习 Python视频教程 通过pickle模块的序列化操作我们能够将程序中运行的
  • 大数据毕设项目 大数据实时疫情数据可视化系统 - flask python

    文章目录 1 课题背景 2 数据库设计实现 3 实现效果 4 Flask框架 5 爬虫 6 Ajax技术 7 Echarts 8 最后 1 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业
  • 使用pytorch版faster-rcnn训练自己数据集

    使用pytorch版faster rcnn训练自己数据集 引言 faster rcnn pytorch代码下载 训练自己数据集 接下来工作 参考文献 引言 最近在复现目标检测代码 师兄强烈推荐FPN 但本文只针对Faster RCNN 大家
  • 小程序swiper动态数据不显示

    情景一 swiper的current不在第一页了 导致第一页的数据看不到 处理方法 在请求数据的时候重置current为0 即
  • C语言printf和scanf函数

    最近在敲c语言例子的时候 对于很多小知识点不清楚 这里主要根据例子来总结一下 一 printf函数 1 printf是格式输出函数 它的作用是想终端输出若干个任意类型的数据 一般格式如下 printf 格式控制 输出表列 例如 printf
  • (Java 基础知识) Java线程池

    ExecutorService 建立多线程的步骤 1 定义线程类 class Handler implements Runnable 2 建立ExecutorService线程池 ExecutorService executorServic
  • 配置logback 不打印日志

    今天尝试下logback 做测试
  • 【C++】 Qt-事件(下)(事件过滤、自定义事件)

    文章目录 事件过滤 自定义事件 事件过滤 event 函数是一个protected的函数 这意味着我们要想重写event 必须继承一个已有的组件类 重写其event 函数 event 函数的确有一定的控制 不过有时候我的需求更严格一些 我希
  • DB2数据库跨实例恢复

    DB2数据库也可以和Oracle一样 进行异机或跨实例进行备份集的恢复 原理与Oracle有几分类似 但DB2对表空间的处理有点特殊 分自动管理的表空间和非自动管理的表空间 经过测试 大致恢复过程如下 首先在线备份原数据库 包含原数据库的日
  • Windows 10 安装python到U盘并设计自动添加环境变量脚本

    1 在python官网正常下载python安装包 2 U盘插到电脑上 安装到U盘的版本如果和电脑上的完全相同 则需要暂时屏蔽python环境变量 未实验 我选择的是在U盘中安装的32位的python3 7 9 笔记本电脑上安装的是64位的p
  • 在qt项目中使用外部第三方字体库字体

    文章目录 一 第三方字体库字体 二 使用方法 1 直接代码添加 2 使用QSS进行添加 一 第三方字体库字体 在项目开发中 有时候我们可能会由于某些原因会用到qt所提供的字体库之外的字体 这个时候就不可以直接设置字体了 需要做一些操作才行