Qt5中文显示

来源:互联网 发布:js history 清除 编辑:程序博客网 时间:2024/05/24 03:23
Qt5中文显示


原文:http://blog.csdn.net/wisape/article/details/38494005


Qt5默认源码字符集和执行字符集为UTF8,所以默认情况下只要中文使用的是UTF8编码格式,Qt5都可以识别,当然,如果是其他编码格式的话就需要做一些转换。这里所说的识别是只是第一步,如果需要正常显示的话还需要对应的字体文件,也就是通常的的ttf文件等,这种文件描述了编码和字型之间的对应关系,使程序可以把编码和字型联系起来,进而把要输出的字型通过framebuffer输出,于是我们就看到了相应的文字。

解释了文字实现的过程,再来看看要怎样让Qt5实现中文输出。

先看中文的编码:
查看Qt程序的界面描述文件*.ui,发现文件头开头是
[html] view plain copy
 print?
  1. <?xml version="1.0" encoding="UTF-8"?>  
这说明UI中已经使用的是UTF8的编码格式。
查看QtCreator->工具->选项->文本编辑器->行为->文件编码
默认编码选择:UTF8
这样源码字符集就是UTF8编码

只有编码还不够,还要编码可以转换为可见的文字,于是再来看Qt5是否有对应的字体文件:
Qt5默认使用的字体文件都放在/usr/lib/fonts目录下, Qt5支持三种类型的字体,*.ttf(需要freetype支持)、*.pfa、*.qpf.
Fonts目录下有很多字体,默认都是Qt5自带的,除了qpf文件外,都可以使用桌面系统的字体查看器查看,使用字体查看器可以查看其中是否有对中文字体的支持,另外还可以使用应用程序中指定字体的方法检验字体支持:

代码中加入

[cpp] view plain copy
 print?
  1. QApplication a(argc, argv);  
  2. QFont font("****", 16);  
  3. a.setFont(font);  

****为字体名称;
Qt5自带的字体文件是没有中文支持的。

从桌面系统或网上下载中文字体,例如fangsong.tty(仿宋字体),拷贝到/usr/lib/fonts目录下,先使用:

[cpp] view plain copy
 print?
  1. QApplication a(argc, argv);  
  2. QFont font("fangsong", 16);  
  3. a.setFont(font);  

检验,结果中文字体显示正常,OK,而且是仿宋没错:)

应为Qt5默认并不会首先匹配我们加进去的字体,所有如果程序不指定font,中文还是无法显示。
考虑到嵌入式系统的特殊性,可以在/usr/lib/fonts目录下只放一种字体,例如仿宋、雅黑等,这样一方面可以解决中文显示的问题,又可以减小image大小,两全其美;缺点嘛,程序不能随便用字体了,不过嵌入式嘛:)

Ps:以上同样适用于其他文字

Shell中文显示

Shell终端无法输出中文存在两个原因:
串口查看工具的编码方式不是UTF8,这种问题常见于windows机器上;
板子上的busybox不支持中文编码UTF8输出
对于原因2,解决方法是再编译busybox的使用打开Unicode的support。
为什么我打开了Unicode support 中文还是?????
原因是Busybox默认的UTF8范围只到767,而中文的最大值为U+9FA5,所以还需要修改
Range of supported Unicode characters
将其设为大于U+9FA5的值

同时enable Allow wide Unicode characters on output选项


总结来说,修改内容有

Kernel 需要修改配置如下

File systems --->

DOS/FAT/NT Filesystems --->

(utf8) Default iocharset for FAT

-*- Native language support --->

(utf8) Default NLS Option

<*> Simplified Chinese charset (CP936, GB2312

<*> NLS UTF-8

make busybox-menuconfig

build/package/busybox/busybox-1.22.x.config

Busybox修改配置

Busybox Settings --->

[*] Support Unicode

(200000) Range of supported Unicode characters

[*] Allow wide Unicode characters on output


保存设置,编译
Shel终端可以显示中文了:)
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 服务器开机账号改了密码忘了怎么办 小米儿童电话手表开不开机怎么办? 上海拍牌超过5次违章怎么办 拍拍贷不能更新还不了款怎么办 起诉网贷平台不知道地址怎么办 网贷不知道在哪个平台借的怎么办 车过户后出现问题车主不承认怎么办 卖了车买家一直不过户怎么办 我的车卖了但是买家不过户怎么办 如果买家拍了赠品但联系不上怎么办 淘宝产品处罚下架顾客退货怎么办 生源地贷款续贷密码忘了怎么办 助学贷款续贷密码忘了怎么办 京东上回收东西如果是坏的怎么办 58.同城找的工作被骗了怎么办 京东第三方买了二手机怎么办 手机无法显示百度视频的视频怎么办 如果微信被盗号朋友钱被骗怎么办 绑定银行卡的电话号码换了怎么办办 银行卡绑定的手机号空号了怎么办 微信提示绑定银行卡次数超限怎么办 手机卡太久没用被注销了怎么办 电信宽带欠费缴费后上不了网怎么办 电信宽带欠费后缴费连不上网怎么办 电脑开不了机屏亮但不开机怎么办 手机信息探探链接点开了怎么办 买的钻戒的票丢掉了怎么办 如果我过户了原来的积分怎么办? 英雄联盟安装到了一半卡住了怎么办 微信登录不上怎么办一直在转圈 lol老是忘了放装备技能怎么办 英雄联盟屏幕出现红框锁定了怎么办 钢三开局修改对电脑有用怎么办 我的世界为什么一直黑屏闪退怎么办 苹果6plus玩游戏闪退怎么办 电脑重置开机黑屏了怎么办才好? 龟头有一小块和鱼鳞一样脱皮怎么办 海盗来了赠送碎片密码忘了怎么办 王者荣耀还差几百金币买英雄怎么办 英雄联盟更新后画面突然很卡怎么办 苹果手机微信登陆没反应怎么办