Qt总结之二十:加载字体库
一、字体文件
如果想直接用系统的字体,在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总结之二十:加载字体库相关推荐
- Qt笔记-桌面应用程序加载字体库(ttf)
首先将下载好的字体库放到资源文件中: 设置相关代码如下: #include "Widget.h"#include <QApplication> #include < ...
- Openresty(二十)加载lua文件的一些细节
一 配置文件中指令加载 ① openresty提供 lua_package_path ++++++++"细节"++++++++0.默认1)会以'环境变量 LUA_PAT ...
- qt int转换成qstring_Qt 加载cern-root库 并调用root类
cern-root是欧洲核子研究中心CERN开发的基于C++,可与python,R,Fortran等语言进行绑定的数据处理框架.cern-root最初基于Qt开发,在root5之前可通过Qt来开发ro ...
- qt中append函数_Qt 加载cern-root库 并调用root类
cern-root是欧洲核子研究中心CERN开发的基于C++,可与python,R,Fortran等语言进行绑定的数据处理框架.cern-root最初基于Qt开发,在root5之前可通过Qt来开发ro ...
- C++ QT加载字体,以及iconfont使用
在一些arm linux板上开发qt界面时,会遇到无法显示中文,产生乱码的情况.这时可以通过加载中文字体解决,例如先下载DroidSansFallback.ttf字体文件到本地,然后将该字体加载到全局 ...
- QT中main函数中加载外部字体:OTF
QT中main函数中加载外部字体:OTF 我们开发的程序中,如果想使用外部下载的开源字体,同时保证在软件发布时,程序字体能保证和开发者环境下一致,且不想通过安装字体方式实现字体跟随软件时,我们需要在代 ...
- [Flutter] 用FontLoader从本地加载字体
App开发过程中,常常会需要加载第三方字体的场景,如何加载字体呢?通常有两种方式: 一.加载asset中内置字体 官方文档 有详细说明 总结起来: 创建fonts文件夹,放置字体(推荐.ttf字体) ...
- 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 ...
- php 文字图片怎么保存为图片,php技术实现加载字体并保存成图片
下面通过一段代码给大家详解介绍下php技术实现加载字体并保存成图片. // Set the content-type header("Content-type: image/png" ...
最新文章
- 利用JFreeChart绘制股票K线图
- wpf的tabcontrol获取当前选中的名字_技巧:ANSA中如何快速批量修改PID名字
- python读取大文件目录_65.Python读取大文件
- 【pyradiomics学习】——安装pyradiomics以及简单示例
- Vaadin和DukeScript中的Hello World
- zabbix邮件通知,短信通知配置详解
- 【重难点】【事务 03】分布式事务
- Android开发——搭建最新版本的Android开发环境
- WindowsServer2003 MSSQL安全
- poj 1838 Banana
- 使用Python库valuequant和每股收益历史数据计算股权价值
- 【机器学习】阿里云天池竞赛——工业蒸汽量预测(2)
- angular中的?:什么意思
- 华为手机助手 无法访问服务器,EMUI4.X手机及windowsXP系统无法正常使用华为手机助手问题...
- 爬虫实战-肯德基kfc门店地址实战
- java怎么快速补缺_Java基础查漏补缺(1)
- 使用 ava 和 jsdom 做前端测试
- 最全elk7.1.1单机配置: ELK+Filebeat+Kafka!
- ibatis批量插入数据-iterate标签详解及应用
- 压缩感知中的数学知识:投影矩阵(projection matrix)
热门文章
- 【Computer Organization笔记28】总复习
- JavaScript中prompt的使用
- Nginx的accept_mutex配置分析
- java 下一代_Java 下一代: 混入和特征
- 类似web表单提交 使界面的滚动条 按要求定位到指定控件
- java 泛型(generics)使用总结
- Java客户端开发是什么_客户端桌面应用一般是用什么技术开发的?
- 2022-03-21 转载办公室之常用职位(英汉)
- [转载] 丛林中的糖果小屋
- JavaWeb——mybatis模糊查询与主键返回