解析 Qt 字库移植并能显示中文 (上篇)
原文http://mobile.51cto.com/symbian-272552.htm
本文介绍的是Qt 字库移植并能显示中文,需要的字体库文件,一般是多个。具体移植那一个,看你使用的字库是什么了,先来看内容。
AD:
Qt 字库移植并能显示中文是本文介绍的内容,先来看内容,如何定制字库(移植字库),需要将至少两个文件赋值到 lib/font目录下
1、fontdir 文件。这个是应用程序寻找当前系统中最合适自己需要的字库的索引;
2、需要的字库文件,一般是多个。具体移植那一个,看你使用的字库是什么了,比如我现在的系统我就是移植的wenquanyi_12pt.bdf就可以了,当然这个比较大。你也可以用小点的。我的flash比较大呵呵,懒得折腾。
在程序中需要这样设置:
- QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
- QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
设置使用utf-8编码也就是unicode编码了,这样在tr和string的都是unicode的编码了,根据字库的索引就能对应相应的字符了。
然后设置字体:
- //字体设置
- QFont font("wenquanyi",12,QFont::Bold); //使用wenquanyi字体
- this->setFont(font);
- //这样就设置了字体了,中文一般使用wenquanyi字体就可以了。很好的。
基础知识介绍:
字符编码
1、字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。在这些编码中,中文和英文可以统一的处理,区分中文编码的方法是高字节的最高位为不为0。GB内码的存储方式始终都是big endian,即高位在前。
2、Unicode是一种字符编码方法,它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。
Unicode与GB码不兼容,只与ASCII兼容。
UCS规定了怎么用多个字节表示各种文字。怎样传输这些编码,是由UTF(Unicode transforation format)规范规定的。常见的UTF规范包括UTF-8(就是以8位为单元对UCS进行编码)、UT F-7、UTF-16。
UTF-*和Unicode是同类,就是在编码方式上不同。首先UTF编码后的大小是不一定,不像Unicode编码后的大小是一样的。
字体库:
一般认为,一个汉字的编码就对应着这样的字形,这还是错误的。内码对于字库来说,只是查找字形的索引。如果换成另一个编码标准的字体,同一个字符串就会呈现不同的字形,也就是乱码。
随着GUI的发展,字库逐渐转向TTF.TTF字库的编码标准没有UTF8的
由于工作需要把ttf字体转换成qpf字体,牵扯到了qt的makeqpf工具的使用方法
先简单说一下qt的字体支持
Qte可以支持以下四种形态的字体格式
- TrueType (TTF)、Postscript Type(PFA/PFB)、Bitmap Distribution Format fonts(BDF)、Qt Prerendered Font(QPF)
Qt中不同字体是用Unicode来处理、转换
因为Unicode(UTF16或者UTF8)最适合在任何人之间传递信息,
至于TrueType(不知道是什么东西,先唬着?)的支援,目前Qte采用的是FreeType2 Livrary来显示字体,可充分享受无段式anti-aliased显示。
经过下午的查证:Truetype是由AppleComputer公司和Microsoft公司联合提出的一种新型数学字形描述技术。他用数学函数描述字体轮廓外形,含有字形构造、颜色填充、数字描述函数、流程条件控制、珊格处理控制、附加提示控制等指令。TrueType采用几何学中二次B样条曲线及直线来描述字体的外形轮廓,其特点是:TrueType即可以作打印字体又可以做屏幕显示;由于它是由指令对字形进行描述,因此它与分辨率无关,输出时总是按照打印机的分辨率输出。无论放大或缩小,字符总是光滑的,不会有锯齿出现。但相对PostScript字体来说,其质量要差一些,特别是在文字太小时,就表现得不是很清楚
简单 一下:truetype,字体就是可以不变形放大的字体,标准的字体大约有三种。*.fon 、*.ttf 、*.ttc,你所问的就是*.ttf 、*.ttc是*.ttf的新标准。*.fon就是很久以前用的字体,dos下现windows还有少量,主要用在系统使用方面可以提高程序的执行效率
FreeType是一个免费的并且可以被移植的TrueType 字库引擎,可以应用于很多平台!
fontdir的简介
下面是截取qtcore中默认的fontdir文件中的中文字库部分
- #Chinese character font from http://wqy.sourceforge.net/en
- wenquanyi wenquanyi_12pt.bdf BDF n 50 120 u
- wenquanyi wenquanyi_13pt.bdf BDF n 50 130 u
- wenquanyi wenquanyi_15pt.bdf BDF n 50 150 u
- wenquanyi wenquanyi_16pt.bdf BDF n 50 160 u
- wenquanyi wenquanyi_12ptb.bdf BDF n 75 120 u
- wenquanyi wenquanyi_13ptb.bdf BDF n 75 130 u
- wenquanyi wenquanyi_15ptb.bdf BDF n 75 150 u
- wenquanyi wenquanyi_16ptb.bdf BDF n 75 160 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)。
文件中每行都标识一个特定的字库,每个段的含义是:第一列为name,第二列为file,第三列为renderer,相当于字型格式,所以有 BDF,TTT,QPF等选择。第四列n表示iitalic,表示是否为斜体字。第五列表示weight,其中50表示Normal,75表示Bold。第六列表示size,例如:120表示12pt。第七列为flags,有下面三个选择:s=smooth(anti-aliased)u =unicode range when saving (default is Latin 1 a = ASCII range when saving(default is Latin 1))
其中属性file,renderer(BDF,TTF,QPF)和size特别要设置对,其它属性问题不大。还要注意如果在该目录下有QPF的文件,系统只会使用QPF格式的文件,而不会读取其它格式的文件,不管FONTDIR里面的内容是什么。如果有多个QPF文件,应用程序按照大小,家族,黑体和斜体的顺序查找,即首先查找大小和自己一样的字库,大小无法区分唯一的字库的再看对应的家族,还是无法区分的再看是否黑体,是否斜体。可以参考PC上的字库索引文件FONTDIR:
例如:
- -cclib -song -medium -r -normal -jiantizi -16 -160 -75 -75 -c -160 -gb2312 1980-0
其中,每个段的含义如下:
- cclib:制造商
- song:字体族,此处表示“宋体”字
- medium:字权重(中等),还有bold(粗体)选项
- r:倾斜,R(Roman),I(Italic),O(Oblique)
- normal:字符集宽度,此外还有condensed,narrow,double
- jiantizi:附加说明(此处意义为“简体字”)
- 16:用像素衡量的宽度。
- 160:点数 10
- 75(1):水平分辨率(dpi)
- 75(2):垂直分辨率(dpi)
- c:间距。c:square,m:fixed width,p:variable width
- 160:平均宽度(10*pixels)
- gb2312.1980:注册字符集,标准名
小结:解析 Qt 字库移植并能显示中文 (上篇)的内容介绍完了,希望本文对你有所帮助,想要深入了解,请参考解析 Qt 字库移植并能显示中文 (下篇)。
http://blog.csdn.net/liuguangzhou123/article/details/7513646
解析 Qt 字库移植并能显示中文 (上篇)的更多相关文章
- 解析 Qt 字库移植并能显示中文 (下篇)
原文http://mobile.51cto.com/symbian-272563.htm 本文介绍的是Qt 字库移植并能显示中文,需要的字体库文件,一般是多个.具体移植那一个,看你使用的字库是什么了, ...
- Qt学习笔记-嵌入式qt程序支持显示中文
移植后得qt程序在开发板上运行时无法显示中文. 拷贝windows中的字体也不行. 从网上找到方法. 添加以下代码:需要头文件 #include <QTextCodec> QTextCo ...
- 嵌入式Qt4.8.0支持ttf字库,并显示中文
引言 最近在做QT项目发现中文没法显示,于是百度QT嵌入式显示中文,基本上提示的都是把ttf字库转换为QPF(QT专门支持二进制的),发现这个qpf本身制作就很麻烦,按照网上的做法实实在在来了一边,发 ...
- cocos2d-x 显示中文字符和解析XML文件 转载
源地址:http://codingnow.cn/cocos2d-x/1038.html 在cocos2d-x中直接显示中文的时候会出现乱码,虽然在实际开发中把字符串直接写在代码里也不是好的做法,但是有 ...
- QT显示中文的几个问题
最近用QT,需要在界面上显示中文,发现QT无法直接在代码中写中文,只能通过曲线救国的方式,比如用QT语言家,QTextCodec的fromloca8bit 研究了半天,终于明白了一些编码的问题 1.V ...
- 如何让移植的嵌入式ARM显示中文汉字
如果你急于在ARM开发板上看到Qt显示中文,而不介意稍次的效果,可以在运行Qt程序时,增加设置字体的参数,比如运行名为hello的Qt程序:./hello -fn unifont 1.首先,需要文泉驿 ...
- Qt使用MSVC编译器不能正确显示中文的解决方案
用VisualStudio做为IDE,使用Qt框架,显示中文,会出现乱码的情况. 原因:MSVC编译器虽然可以正常编译带BOM的UTF-8编译的源文件,但是生成的可执行文件的编码是Windows本地字 ...
- 关于使用字库-雅黑字体(msyh.ttf )显示中文的一些。。。
开发中有关程序在使用字库 雅黑字体的 的时候 vs下一开始没有显示出中文来,都是乱码. 在android下使用该字体库的时候同样也没有显示出中文,后来搜搜了原因,得知编码必须是UTF-8 也就是使用字 ...
- 【ARM-Linux开发】ARM板卡上QT显示中文
平台:Freescale imx6 编译系统:yocto Qt版本:5.5.1 刚弄了个Qt程序到开发板,发现中文都没有显示,英文可以显示. 就加了个中文字库.DroidSansFallback ...
随机推荐
- POJ 2728 - 最小比例生成树
传送门 题目大意 有n个村庄,每个村庄都有一个(x, y)坐标和z海拔,定义两个村庄间的dist为坐标的距离,cost为海拔差的绝对值,求图的一颗生成树,使得\(\frac{\sum cost}{\s ...
- Android Studio如何打jar包
前言 公司经常和客户提供SDK,提供一个jar包sdk是一件很平常的事.Eclipse 有图形界面和向导供开发者将一个项目导出为jar包,相对来讲是比较简单的,切换到Android Studio后,则 ...
- git安装使用详解
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不 需要联网了,因为版本都是在自己的电脑上.既然每个人的电脑都有一个完整的版本库,那多个人如何 ...
- qemu使用copy-on-write(COW)磁盘
写时复制(copy-on-write,缩写COW)技术不会对原始的镜像文件做更改,变化的部分写在另外的镜像文件中,这种特性在qemu中只有QCOW格式支持,多个 COW 文件可以指向同一映像同时测试多 ...
- 程序员,用NuGet管理好你的包包(转)
每个女人都有很多包包:其实男人也有,但只有会写程序的男人才有 —— 代码世界中的大“包”小“包”.这些大包小包,有花钱买的,有从开源市场淘的,也有自己或同事亲手制作的. 包包有个特点:容易坏,更新快, ...
- Android4.0图库Gallery2代码分析(一) 程序整体结构
Android4.0图库Gallery2代码分析(一) 程序整体结构 Gallery2的用例图分析:Gallery2主要功能是实现本地存储器.MTP存储器和网络存储器中媒体(图像和视频)的浏览.显示和 ...
- $.extend(true,{},a,b)解析
原文:$.extend(true,{},a,b)解析 版权声明: https://blog.csdn.net/bsfz_2018/article/details/81738437 什么是$.exten ...
- 零元学Expression Design 4 - Chapter 3 看小光被包围了!!如何活用「Text On Path」设计效果
原文:零元学Expression Design 4 - Chapter 3 看小光被包围了!!如何活用「Text On Path」设计效果 本章将教大家如何活用「Text On Path」,做出文绕图 ...
- Linux 下非 root 用户安装 theano(配置 GPU)
非 root 用户,安装 Python 第三方的包,尤其像 theano,存在大量的依赖项,存在的主要问题,是安装各个包时的权限问题.所幸,存在这样一个集成工具,叫 anaconda,其已经内置了许多 ...
- WPF应用程序内嵌网页
原文:WPF应用程序内嵌网页 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/shaynerain/article/details/78160984 WPF ...