码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Qt添加自定义字体


    前言

    Qt中加入字体是一个很常见的需求,实现方法也不唯一,笔者记录下常用的几种方法

    一、导入字体的常见需求

    1.为显示中文

    一些特别的平台发布时,平台本身是没有安装中文字体的,此时只想导入一种中文字体,以显示中文。

    如android、WebAssembly、linux系统,经常会缺少中文字体

    2.为显示特殊符号

    在某些条件受限时,经常无UI设计的图标,此时可以使用图标字体。很多工具或平台都支持,将已有的图标导入到字体文件中,使用时和字体相同,只是显示的是图标,如Fontello - icon fonts generator

    3.其他

    其他情况就不解释了,大部分是功能上的需求。

    二、常见使用方法

    1.从C++中导入

    Qt中有现成的导入函数:QFontDatabase::addApplicationFont()

    只要把字体文件导入就可以了

    QFontDatabase::addApplicationFont(QStringLiteral(":/font/HarmonyOS_Sans_SC_Black.ttf"));

     导入后,可以在需要用到的地方,直接将QFont的family属性设置成对应名字就可以。

    若是需要设置为默认字体,可以在main()函数中,添加如下代码

    1. int fontId = QFontDatabase::addApplicationFont(QStringLiteral(":/font/HarmonyOS_Sans_SC_Black.ttf"));
    2. QStringList fontFamilies = QFontDatabase::applicationFontFamilies(fontId);
    3. qDebug()<<"fontfamilies:"<
    4. if (fontFamilies.size() > 0)
    5. {
    6. QFont font;
    7. font.setFamily(fontFamilies[0]);//设置全局字体
    8. app.setFont(font);
    9. }

    2.从qml中导入

    qml提供了FontLoader类型,用于处理字体导入,只需将字体文件的位置赋给source属性就可以了。使用也很简单,FontLoader类型提供了font和name属性,在需要用到的地方,直接使用就可以。

    1. FontLoader {
    2. id: fontLoader
    3. source: "file:fonts/HarmonyOS_Sans_SC_Black.ttf"
    4. }

    注:字体文件来源、大小 路径

    三、注意事项

    1.字体文件可放在资源文件中,也可以在绝对路径或相对路径。

    笔者建议,若是桌面程序,字体文件在应用程序打包时放入,使用绝对路径;若是移动或web程序,建议放入资源文件中

    2.不少字体文件有版权限制,商用时要注意下

    3.不建议直接使用相对路径中的“.”,若是通过快捷方式启动的程序,“.”是快捷方式所在目录,不是应用程序的实际目录

    4.若有必要,可以对指定字体进行裁剪,以减少字体大小。若字体确实很大,使用qmake可以在.pro文件中添加

    CONFIG += resources_big
    

    后记

    以上只是笔者记忆里的东西,若有缺少,后补充吧。

  • 相关阅读:
    【数据结构与算法分析】树上漫步之探究前序、中序、后序、广度优先遍历算法的实现与优化
    hitTest的基本用法
    11.23Spring 学习第三天
    听劝!不要啥都不懂就学PMP!这100个考试关键点,带你直击考试现场
    Python:突然发现好看壁纸的都在某度图片库了,这还爬什么壁纸网站?
    2022年您应该考虑使用的最佳WordPress主题
    vue3 - 基于 Vue3 + Vite4 + TypeScript5 + Element-Plus + Pinia 技术栈的后台管理系统
    金融知识分析系列之:期货种类、T+0期货品种、期货IF、沪深300股指期货、IF交割月份
    Golang 发送邮件
    Node.js | 基于 MongoDB 的简易用户管理系统
  • 原文地址:https://blog.csdn.net/aggs1990/article/details/126922109
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号