嵌入式Linux上Qt5的中文显示

来源:互联网 发布:歼二十 知乎 编辑:程序博客网 时间:2024/05/22 22:03
Qt5中文显示

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

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

先看中文的编码:
查看Qt程序的界面描述文件*.ui,发现文件头开头是
<?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文件外,都可以使用桌面系统的字体查看器查看,使用字体查看器可以查看其中是否有对中文字体的支持,另外还可以使用应用程序中指定字体的方法检验字体支持:

代码中加入

QApplication a(argc, argv);QFont font("****", 16);a.setFont(font);

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

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

QApplication a(argc, argv);QFont font("fangsong", 16);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