一、概述
QT/E(Qt for Embedded)使用FreeType 2字体引擎来支持字体显示。比如TrueType(ttf),Postscript Type(PFA/PFB),Bitmap Distrubution Format fonts(BDF)等。同时QT/E自己还支持Qt Prerendered Font(QPF)字体,是一种位图字体,不可缩放,作为QTE的本地字体。
TrueType是由苹果和微软为主开发的矢量字体技术(与之对应的是点阵字体),可以不变形的放大和缩小,文件名一般是.fon、.ttf和*.ttc,ttc是ttf的新标准,而fon是以前的老标准。目前有FreeType的字体引擎,作为一个软件库,能够帮助处理TrueType字体的显示。
BDF字体是X窗口系统的位图字体格式,其文件分成两部分,第一部分是描述整体属性的header,第二部分则是每个字型的属性和位图数据。
QPF字体格式仅用于QT/Embedded的不可缩放字体,属于QTE的官方字体,可用工具makeqpf,将ttf文件生成qpf字体文件。
在Qt中直接使用TTF字体或者PFA/PFB这些矢量字体,应用程序会在显示的时候需要将矢量信息计算成点阵形式,会占用大量的计算能力和RAM。如果选用BDF字体,则速度非常慢,而且也需要占用较多资源。QPF是位图字体,不需要再显示时计算点阵,且由于不可缩放,位图直接拿去显示即可,速度和资源占用是最好的。
当QTE应用启动时,会到$QT/lib/fonts目录下去寻找对应的字体文件,包括QBF和TTF字体文件,为兼容期间也会继续读取该目录下的fontdir文件。在代码中使用QFont来应用字体,如果选定字体不存在,QFont有内在的match策略,自动选择默认字体。
二、中文字体设置
本人在做项目时,在中文实现这块吃了不少苦头,网上的资料虽多,但是讲的透彻的没几个,而且好多博文只是知其然不知其所以然,所以本人走了不少弯路,现特把自己的经验做一下总结。
1、有了中文字体库文件,例如文泉驿字体库(从120到360尺寸的都有),也放到相应的目录下了,但是在应用程序中无法设置字体的大小。
2、查了很多资料才知道还得有个文件fontdir才行(罪魁祸首),于是写了一个fontdir文件就可以了。这个fontdir文件在移植好的Qt库下没有,不知道什么原因。
3、fontdir文件内容:
wenquanyi wenquanyi_120_50.qpf QPF n 50 120 u
wenquanyi wenquanyi_120_75.qpf QPF n 75 120 u
wenquanyi wenquanyi_130_50.qpf QPF n 50 130 u
wenquanyi wenquanyi_130_75.qpf QPF n 75 130 u
wenquanyi wenquanyi_140_50.qpf QPF n 50 140 u
wenquanyi wenquanyi_140_75.qpf QPF n 75 140 u
wenquanyi wenquanyi_150_50.qpf QPF n 50 150 u
wenquanyi wenquanyi_150_75.qpf QPF n 75 150 u
wenquanyi wenquanyi_160_50.qpf QPF n 50 160 u
wenquanyi wenquanyi_160_75.qpf QPF n 75 160 u
wenquanyi wenquanyi_180_50.qpf QPF n 50 180 u
wenquanyi wenquanyi_200_50.qpf QPF n 50 200 u
wenquanyi wenquanyi_220_50.qpf QPF n 50 220 u
wenquanyi wenquanyi_220_75.qpf QPF n 75 220 u
wenquanyi wenquanyi_280_50.qpf QPF n 50 280 u
wenquanyi wenquanyi_280_75.qpf QPF n 75 280 u
wenquanyi wenquanyi_360_50.qpf QPF n 50 360 u
wenquanyi wenquanyi_360_75.qpf QPF n 75 360 u
第一列:字体的名字,就是你在设置字体的时候的字体的名字
第二列: (file)即具体的文件名字
第三列: (renderer)字体的格式,有BDF,TTT,QPF等选择。
第四列: n 表示iitalic,是否为斜体
第五列:weight,50 = Nomal,75=Bold
第六列: size 120表示12pt
第七列flags 有三个选项:s(smooth)、u(unicode顺序保存)、a(ascii 顺序保存,默认是Latin 1)。
4、设置中文字体:
QFont font;
font.setPointSize(220);
font.setFamily((“wenquanyi”));
font.setBold(false);
a.setFont(font);
5、通过Qt Designer设计的布局,包括字体的大小,会自动对应到相应的中文字体文件。