最近在工作中有一个小插曲。web后台使用的文字渲染插件无法对字体加粗,不巧的是,这个插件已经停止更新了,因此这个bug无法解决, 所以让我用qt实现这个插件的功能(没错,就是为了一个加粗的功能重写整个插件,还好这个插件算是小程序,哈哈)
在我发现QPainter、QImage、QPen这些好用的东西,并且看到QFont自带setBold接口,我确定QT自带的功能实现这个小程序简直是小case,然而,在我花费足够多的时间把整个插件的功能都写好之后,我发现属于需求内的幼圆字体在Linux下无法加粗,其他字体加粗没问题,但是相同的字体文件simyou.ttf在windows下用相同的代码运行却可以加粗,我当时直接傻眼了,难道这个时候要转战其他实现方式?不不不不,要坚信方法总比问题多!这个时候救星——fontForge 出现了!dang dang dang地出现了!还是开源的! 我下载了一个windows版本的fontForge,对simyou.ttf进行了改写——简单地做了加粗操作,保存为YouYuanBOLD.ttf,在程序中要用simyou.ttf粗体的话,直接外部加载YouYuanBOLD.ttf即可!感谢开源软件,让程序员世界变得这么美好!
这里附上两条:
【1】qt加载外部字体的方法;
(1)在资源文件中添加字体文件,如YouYuanBOLD.ttf
(2) 代码部分:
QFont font;
int nFontID = QFontDatabase::addApplicationFont(":/YouYuanBOLD.ttf");if(nFontID != 1){ QStringList qstrList(QFontDatabase::applicationFontFamilies(fontID));if(strList.count() > 0) {font = strList.at(0);}}
else
{font.setFamily("宋体");
}
【2】fontForge使用教程
http://designwithfontforge.com/zh-CN/What_Is_a_Font.html
fontForge官网
https://fontforge.org/en-US/