一、字体文件

如果想直接用系统的字体,在UI文件中拖一个Font Combo Box,QFontComboBox显示的字体可以设置,如果觉得系统的字体太多,想自己定义字体,就得找一些字体文件,我这里用的是win10在C:\Windows\Fonts下面可以找到一些字体文件,自己挑一些用的着的复制出来

二、设计方式

系统提供的QFontComboBox提供的字体太多,并且不能提供删除和增加,可扩展性不太好,本人写了一个,可以加载外部字体,并且可以删除字体文件,有一个需要注意的地方是,程序如果加载了字体文件,这个字体文件就不能删除,我的做法是这样的,用户选择删除字体文件时,字体文件列表框和字体下拉框这个选项没有被删除,这个被删除的字体文件名被写进一个文件,等下一次加载程序的时候,把上一次要删除的字体文件删除,字体下拉款的大小重新进行了设置,保证了用户能看到完整的字体名字,但是下拉框里面显示的字体名字都是英文的,如果想变成中文就得用一个map映射,中文和英文的字体,这里提供一个映射表 
https://wenku.baidu.com/view/598e5aec19e8b8f67c1cb915.html

三、code block

#include "fontlist.h"
#include <QDebug>
#include <QListWidgetItem>
#include <QFile>
#include <QFileDialog>
#include <QFontDatabase>
#include <QTextStream>
#include <QMap>fontList::fontList(QWidget *parent): QWidget(parent)
{ui.setupUi(this);fontDir = new QDir("./Resources/fonts/");ui.comboBox->view()->setFixedWidth(560);//记录上次删除字体的文件QFile file("./Resources/deletefile.txt");if (file.open(QIODevice::ReadOnly)) {QTextStream out(&file);QString fileUrl = out.readLine();//删除字体文件QFile::remove(fileUrl);}timer = new QTimer();connect(timer, SIGNAL(timeout()), this, SLOT(setFontComboBox()));connect(ui.loadFont, SIGNAL(clicked()), this, SLOT(slotLoadFont()));connect(ui.delFont, SIGNAL(clicked()), this, SLOT(slotDelFont()));loadFontFile();setFontComboBox();}fontList::~fontList()
{}void fontList::loadFontFile()
{//加QDir::Files是不让显示QStringList fileList = fontDir->entryList(QDir::Files);qDebug() << fileList.length();ui.listWidget->addItems(fileList);
}void fontList::slotLoadFont()
{QString fileUrl = QFileDialog::getOpenFileName(this, "open file", "", "TTF File(*.ttf)");if (fileUrl.isEmpty())return;int index = fileUrl.lastIndexOf("/");//从url中截取文件名字QString fileName = fileUrl.mid(index + 1);QString newFileUrl = "./Resources/fonts/" + fileName;qDebug() << newFileUrl;QFile::copy(fileUrl, newFileUrl);ui.listWidget->addItem(fileName);timer->start(1000);
}
void fontList::slotDelFont()
{QListWidgetItem *item = ui.listWidget->currentItem();if (item != NULL) {QString fileName = item->text();QMap<QString, QString>::iterator i = map1.find(fileName);QString fontName = i.value();QMap<QString, int>::iterator i2 = map2.find(fontName);int index = i2.value();ui.comboBox->removeItem(index);QString fileUrl = "./Resources/fonts/" + item->text();QFile file("./Resources/deletefile.txt");if (file.open(QIODevice::WriteOnly)) {QTextStream in(&file);in << fileUrl;}file.close();delete item;}
}
void fontList::setFontComboBox()
{timer->stop();ui.comboBox->clear();int index = 0;QStringList fileList = fontDir->entryList(QDir::Files | QDir::Readable);qDebug() << fileList.length();foreach(QString fileName, fileList) {QString fileUrl = "./Resources/fonts/" + fileName;int fontId = QFontDatabase::addApplicationFont(fileUrl);QStringList fontFamilies = QFontDatabase::applicationFontFamilies(fontId);if (!fontFamilies.empty()) {QString fontName = fontFamilies.at(0);ui.comboBox->addItem(fontName);map1[fileName] = fontName;map2[fontName] = index;index++;}}
}

Qt总结之二十:加载字体库相关推荐

  1. Qt笔记-桌面应用程序加载字体库(ttf)

    首先将下载好的字体库放到资源文件中: 设置相关代码如下: #include "Widget.h"#include <QApplication> #include < ...

  2. Openresty(二十)加载lua文件的一些细节

    一     配置文件中指令加载 ①  openresty提供  lua_package_path ++++++++"细节"++++++++0.默认1)会以'环境变量 LUA_PAT ...

  3. qt int转换成qstring_Qt 加载cern-root库 并调用root类

    cern-root是欧洲核子研究中心CERN开发的基于C++,可与python,R,Fortran等语言进行绑定的数据处理框架.cern-root最初基于Qt开发,在root5之前可通过Qt来开发ro ...

  4. qt中append函数_Qt 加载cern-root库 并调用root类

    cern-root是欧洲核子研究中心CERN开发的基于C++,可与python,R,Fortran等语言进行绑定的数据处理框架.cern-root最初基于Qt开发,在root5之前可通过Qt来开发ro ...

  5. C++ QT加载字体,以及iconfont使用

    在一些arm linux板上开发qt界面时,会遇到无法显示中文,产生乱码的情况.这时可以通过加载中文字体解决,例如先下载DroidSansFallback.ttf字体文件到本地,然后将该字体加载到全局 ...

  6. QT中main函数中加载外部字体:OTF

    QT中main函数中加载外部字体:OTF 我们开发的程序中,如果想使用外部下载的开源字体,同时保证在软件发布时,程序字体能保证和开发者环境下一致,且不想通过安装字体方式实现字体跟随软件时,我们需要在代 ...

  7. [Flutter] 用FontLoader从本地加载字体

    App开发过程中,常常会需要加载第三方字体的场景,如何加载字体呢?通常有两种方式: 一.加载asset中内置字体 官方文档 有详细说明 总结起来: 创建fonts文件夹,放置字体(推荐.ttf字体) ...

  8. Three.js Vue 如何加载字体,和遇到问题解决: 中加载字体的问题 Uncaught SyntaxError: Unexpected token = in JSON at position 0

    Three.js Vue 中加载字体的问题 Uncaught SyntaxError: Unexpected token = in JSON at position 0 一.转换字体文件到 json ...

  9. php 文字图片怎么保存为图片,php技术实现加载字体并保存成图片

    下面通过一段代码给大家详解介绍下php技术实现加载字体并保存成图片. // Set the content-type header("Content-type: image/png" ...

最新文章

  1. 利用JFreeChart绘制股票K线图
  2. wpf的tabcontrol获取当前选中的名字_技巧:ANSA中如何快速批量修改PID名字
  3. python读取大文件目录_65.Python读取大文件
  4. 【pyradiomics学习】——安装pyradiomics以及简单示例
  5. Vaadin和DukeScript中的Hello World
  6. zabbix邮件通知,短信通知配置详解
  7. 【重难点】【事务 03】分布式事务
  8. Android开发——搭建最新版本的Android开发环境
  9. WindowsServer2003 MSSQL安全
  10. poj 1838 Banana
  11. 使用Python库valuequant和每股收益历史数据计算股权价值
  12. 【机器学习】阿里云天池竞赛——工业蒸汽量预测(2)
  13. angular中的?:什么意思
  14. 华为手机助手 无法访问服务器,EMUI4.X手机及windowsXP系统无法正常使用华为手机助手问题...
  15. 爬虫实战-肯德基kfc门店地址实战
  16. java怎么快速补缺_Java基础查漏补缺(1)
  17. 使用 ava 和 jsdom 做前端测试
  18. 最全elk7.1.1单机配置: ELK+Filebeat+Kafka!
  19. ibatis批量插入数据-iterate标签详解及应用
  20. 压缩感知中的数学知识:投影矩阵(projection matrix)

热门文章

  1. 【Computer Organization笔记28】总复习
  2. JavaScript中prompt的使用
  3. Nginx的accept_mutex配置分析
  4. java 下一代_Java 下一代: 混入和特征
  5. 类似web表单提交 使界面的滚动条 按要求定位到指定控件
  6. java 泛型(generics)使用总结
  7. Java客户端开发是什么_客户端桌面应用一般是用什么技术开发的?
  8. 2022-03-21 转载办公室之常用职位(英汉)
  9. [转载] 丛林中的糖果小屋
  10. JavaWeb——mybatis模糊查询与主键返回