作为非英语国家人员开发的类库,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有很大的进步,大家可以试试
相关推荐
【Image captioning】图像描述标注(Image captioning)软件的设计与实现
大家好!我是一位对图像字幕(Image captioning)生成感兴趣的研究者。在研究过程中,我不可避免地需要对图像进行标注。然而,早期阶段我使用TXT记事本进行语言描述时,遇到了一些效率低下、错标和漏标等问题。为了提高工作效率,我设计了一款基于QT的图像描述标注软件。
qt 语言家(小结)
目标:翻译 tr("xxxx")中的内容,和控件,菜单栏的内容本来以为qt 自己能翻译的,既然有语言家,我还是大意了需要手动翻译大前提: 这个文件之前已经添加 ,本来工程中没有的哈在概要信息中出现如下信息即可添加最后一个zh.ts 即可使用qt 语言家打开该文件这个应该都是灰色的问号,因为之前改过,所以不一样源文下边写上你想要的翻译然后点击这个最右侧的绿色对号,然后继续翻译。
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
好工具推荐系列: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 年前...
QT中文显示乱码解决
问题如下:1.中文显示乱码2.数据库连接不上问题一:但是如果我们的软件只运行在中文系统下,最简单的方法:在main函数中调用QTextCodec::setCodecForTr( QTextCodec::codecForName("GBK") );就可以了。记得这句要在所有使用tr的语句前调用。以后在需要使用中文的地方使用tr("中文字符");就可以了。但事情真的这么简单吗?当我将一个测试程序拷贝到...
更改qt复选框大小_Qt编写控件属性设计器5-属性中文
一、前言在上一篇文章中就提到过,使用qtpropertybrowser来加载属性,对应加载到的属性是英文的,也就是控件类中Q_PROPERTY描述的变量名称,如何变成中文或者其他语言显示呢?这个就需要研究qtpropertybrowser的源码了,通过研究发现,在QtObjectControllerPrivate类中负责对控件的属性名称进行遍历,然后发送到QtVariantPropertyMana...
qt显示中文乱码,编译提示常量中有换行符,文本后缀“xxx”无效,未找到文本运算符或者文本运算符模板“xxx”
系统:windows10 硬件:thinkpad T590 qt版本:Qt 5.14.1 Qt Creator版本:4.11.1 一开始我用MinGW编译器能正常编译,并且显示中文字符串也正常,如下图: 然后我改成了msvc编译器,结果编译的时候就挂了,我慢慢的改动字符串内容,发现报的错还不一样,要么提示常量中有换行符,如下图: 要么提示文本后缀“xxx”无效,未找到文本运算符或者文本运算符模板“xxx”,如下图: 要么编译不报错,但运行显示乱码,如下图: 研究后发现这.
vs2017编码格式查看_VS2017里代码直接写中文的问题分析
需求是1.跨平台2.QT开发3.不考虑海外发行的翻译问题。在这样的背景下,我决定把中文直接写在代码里算了,本来是用key-value方式存在一个文本文件里进行读取,然后生成一个map存在内存里,这么做不会有编码问题,但是写起来比较麻烦,每次加文字都需要加key。因为要跨平台,那就不能使用Ansi编码,不然的话中文在MAC下会直接显示为乱码的,因为用VS写中文是GB2312编码的,在MAC下读不出来...
一个标准的医学四视图浏览应用程序
标准的医学四视图浏览应用程序,附带源代码,代码比较老。
一个标准的医学四视图浏览应用程序及源代码
一个标准的医学四视图浏览应用程序及源代码 去发现同类优质开源项目:https://gitcode.com/ 此资源库提供了一个标准的医学四视图浏览应用程序的源代码,该程序能够显示医学图像的横断面、矢状面、冠状面以及三维视图。三维视图是通过多平面重建(MPR)技术实现的。程序还具备VTK中文显示功能,并提供了多种交互操作,如:使用鼠标左键进行放大缩小,使用右键调整HU值,以及换切片等,所有操作都是联...
Qt 中文显示
Qt 中文显示
Linux下QT5中文显示乱码,QT 中文显示乱码问题
Qt中的中文显示,经常会出现乱码,但在UI设计界面上添加的中文是不会出现乱码的,如果你刚使用qt,那么你肯定会碰到这个问题。最近用QT编程 发现QT乱码问题 .但大都说是编码问题 ,通研究分析 :出现乱码分为:1编辑器显示乱码 ,特点是中文注释显示乱码.解决办法:一般这种乱码是源代码由不同编辑器实现 ,出现代码不兼容 编辑器顶端会提示,然后点击右上角的编辑代码修改编码可以解决.2软件字符乱码 一...
1637




被折叠的 条评论
为什么被折叠?



