关于QT中显示中文的一些研究

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

作为非英语国家人员开发的类库,QT有充分的理由优先考虑支持Unicode和各国自定义字库编码。大家也知道了QT对软件Internationalization有一套完整的开发模型,包括专门为此写的linguist程序。但是如果我们的软件只运行在中文系统下,最简单的方法是什么呢?最简单的方法,就是在main函数中调用QTextCodec::setCodecForTr( QTextCodec::codecForName("GBK") );就可以了。记得这句要在所有使用tr的语句前调用。以后在需要使用中文的地方使用tr("中文字符");就可以了。相信许多老MFCer都知道_T("")的用法,tr感觉类似一些,而且以后想做其它语言版本时还可以在linguist程序中翻译。
但事情真的这么简单吗?当我将一个测试程序拷贝到一台没装过Qt的电脑上时,tr中的字都显示不了了。奇怪的是用Creater IDE生成的UI界面中的汉字能正常显示。看了qmake生成ui的.h文件,发现那些中文字符已经被自动转换成UTF8 encoding了。奇怪的是,QTextCodec::setCodecForTr( QTextCodec::codecForName("GBK") );改为QTextCodec::setCodecForTr( QTextCodec::codecForName("utf-8") );也不行。没办法了,查资料,然后看了源代码。折腾了2个小时终于搞清楚了。
原来Codecs是以plugin的形式被调用的,显示中文的codec plugin文件是qcncodecs4.dll。里面有QGb18030Codec、QGbkCodec和QGb2312Codec三个类。注意,后两个类是从第一个类派生的,因为它们的字符只是Gb18030的特定子集。GBK和GB2312只是为了兼容旧的系统和软件。大家以后可以直接使用GB18030。这个类真正的“肉”就是巨长的一个编码数组。(这里感谢turbolinux,gnuchina等一些前辈提供了这些编码,详见Qt中的说明)
既然找到了正主儿,那么问题也就迎刃而解了。将qcncodecs4.dll拷入目标机器的特定路径,如果你开发的电脑Qt安装目为C:/Qt的话,qcncodecs4.dll应该拷入目标电脑的C:/Qt/Plugins/Codecs。运行程序,看到了久违的汉字。
有没有更好的方法呢?在Qt(Cute)中当然有了:)
感谢Qt的plugin系统,将qcncodecs4.dll拷贝到运行程序目录下的特定目录,如运行程序完整路径为C:/MyApp/MyApp.exe,那么qcncodecs4.dll应拷贝至C:/MyApp/Plugins/Codecs下,然后在main函数中加入下面的代码:

QApplication a(argc, argv);

QString sPath = a.applicationDirPath();
sPath += QString("/plugins");
a.addLibraryPath(sPath);

这段代码将C:/MyApp/Plugins加至plugin的目录list中,制作软件安装程序时将qcncodecs4.dll文件与其它文件一起打包,安装时按ExePath/Plugins/Codecs目录安装即可。
至此,能想到的问题都搞清楚了,我可以睡觉了。

PS1:我使用的是最新的Qt 4.6版
PS2:Debug版本要使用qcncodecsd4.dll,跨平台的就是不一样,MS的大bug在这里不会再坑人了
PS3:Qt最新的Creater有很大的进步,大家可以试试

Qt学习之路【1】:QT显示中文问题 最近,公司项目的GUI界面使用的是Qt研究了近两个月的Qt发现中文显示确实是一个问题,这个问题中主要存在两方面的问题: 【1】中文显示; 【2】中文乱码; 其中【1】问题出现的情景是:Qt的界面只有英文字母,中文一个都不显示,也不会出现乱码;【2】问题出现的情景是:Qt界面本来显示汉字的地方全部被乱码所代替。 【1】问题产生的原因是:Qt字库中没有相应的字体,提供给Q 阅读详情

相关推荐

【Image captioning】图像描述标注(Image captioning)软件的设计与实现

大家好!我是一位对图像字幕(Image captioning)生成感兴趣的研究者。在研究过程中,我不可避免地需要对图像进行标注。然而,早期阶段我使用TXT记事本进行语言描述时,遇到了一些效率低下、错标和漏标等问题。为了提高工作效率,我设计了一款基于QT的图像描述标注软件。

安静到无声 1637

qt 语言家(小结)

目标:翻译 tr("xxxx")中的内容,和控件,菜单栏的内容本来以为qt 自己能翻译的,既然有语言家,我还是大意了需要手动翻译大前提: 这个文件之前已经添加 ,本来工程中没有的哈在概要信息中出现如下信息即可添加最后一个zh.ts 即可使用qt 语言家打开该文件这个应该都是灰色的问号,因为之前改过,所以不一样源文下边写上你想要的翻译然后点击这个最右侧的绿色对号,然后继续翻译。

weixin_44778940的博客 555

MO,PO,QT资源汉化利器 Virtaal-0.7.1

MO,PO,QT资源文件的汉化利器,无需再进行资源文件的格式转换,值得推荐!

使用Qt linguist汉化

工作笔记: 汉化两种途径: 1. 采用英文再翻译为中文 2. 直接在代码中使用中文 ================分割线==================== 1. 直接在代码中使用中文 Qt与MSVC中文乱码问题的解决方案 -QTCN开发网 - Powered by phpwind http://www.qtcn.org/bbs/read-htm-tid-60163.html

qq_38005267的博客 3316

好工具推荐系列:Qt多国语言翻译国产软件digital translate

官网: http://translate.digitser.cn/ http://dt.digitser.cn/zh-CN/app/translate/download.html 官方软件说明:(详细内容请看http://forum.digitser.cn/thread-2293-1-1.html) 本文所要介绍的 Qt/C++ *.ts *.qm 文件,"德云社区" 2009 年前...

$firecat利白的代码足迹$ 1359

QT中文显示乱码解决

问题如下:1.中文显示乱码2.数据库连接不上问题一:但是如果我们的软件只运行在中文系统下,最简单的方法:在main函数中调用QTextCodec::setCodecForTr( QTextCodec::codecForName("GBK") );就可以了。记得这句要在所有使用tr的语句前调用。以后在需要使用中文的地方使用tr("中文字符");就可以了。但事情真的这么简单吗?当我将一个测试程序拷贝到...

weixin_30402343的博客 268

更改qt复选框大小_Qt编写控件属性设计器5-属性中文

一、前言在上一篇文章中就提到过,使用qtpropertybrowser来加载属性,对应加载到的属性是英文的,也就是控件类中Q_PROPERTY描述的变量名称,如何变成中文或者其他语言显示呢?这个就需要研究qtpropertybrowser的源码了,通过研究发现,在QtObjectControllerPrivate类中负责对控件的属性名称进行遍历,然后发送到QtVariantPropertyMana...

weixin_39673184的博客 173

qt显示中文乱码,编译提示常量中有换行符,文本后缀“xxx”无效,未找到文本运算符或者文本运算符模板“xxx”

系统:windows10 硬件:thinkpad T590 qt版本:Qt 5.14.1 Qt Creator版本:4.11.1 一开始我用MinGW编译器能正常编译,并且显示中文字符串也正常,如下图: 然后我改成了msvc编译器,结果编译的时候就挂了,我慢慢的改动字符串内容,发现报的错还不一样,要么提示常量中有换行符,如下图: 要么提示文本后缀“xxx”无效,未找到文本运算符或者文本运算符模板“xxx”,如下图: 要么编译不报错,但运行显示乱码,如下图: 研究后发现这.

weixin_43935474的博客 5905

vs2017编码格式查看_VS2017里代码直接写中文的问题分析

需求是1.跨平台2.QT开发3.不考虑海外发行的翻译问题。在这样的背景下,我决定把中文直接写在代码里算了,本来是用key-value方式存在一个文本文件里进行读取,然后生成一个map存在内存里,这么做不会有编码问题,但是写起来比较麻烦,每次加文字都需要加key。因为要跨平台,那就不能使用Ansi编码,不然的话中文在MAC下会直接显示为乱码的,因为用VS写中文是GB2312编码的,在MAC下读不出来...

weixin_34246656的博客 1330

一个标准的医学四视图浏览应用程序

标准的医学四视图浏览应用程序,附带源代码,代码比较老。

weixin_38293453的博客 468

一个标准的医学四视图浏览应用程序及源代码

一个标准的医学四视图浏览应用程序及源代码 去发现同类优质开源项目:https://gitcode.com/ 此资源库提供了一个标准的医学四视图浏览应用程序的源代码,该程序能够显示医学图像的横断面、矢状面、冠状面以及三维视图。三维视图是通过多平面重建(MPR)技术实现的。程序还具备VTK中文显示功能,并提供了多种交互操作,如:使用鼠标左键进行放大缩小,使用右键调整HU值,以及换切片等,所有操作都是联...

gitblog_06798的博客 293

Qt 中文显示

Qt 中文显示

yttyffggh的博客 4501

Linux下QT5中文显示乱码,QT 中文显示乱码问题

Qt中的中文显示,经常会出现乱码,但在UI设计界面上添加的中文是不会出现乱码的,如果你刚使用qt,那么你肯定会碰到这个问题。最近用QT编程 发现QT乱码问题 .但大都说是编码问题 ,通研究分析 :出现乱码分为:1编辑器显示乱码 ,特点是中文注释显示乱码.解决办法:一般这种乱码是源代码由不同编辑器实现 ,出现代码不兼容 编辑器顶端会提示,然后点击右上角的编辑代码修改编码可以解决.2软件字符乱码 一...

weixin_34207925的博客 2426
上一篇: Qt初体验
下一篇: Qt的Model/View Framework解析
superjoel
博客等级 码龄25年 137粉丝 24原创
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值