关于QT中显示中文的一些研究
来源:互联网 发布:福州哪里收淘宝模特 编辑:程序博客网 时间:2024/06/01 14:55
作者:superjoel
转自:http://blog.csdn.net/superjoel/article/details/5044689
作为非英语国家人员开发的类库,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中显示中文的一些研究
- 关于QT中显示中文的一些研究
- 关于QT中显示中文的一些研究
- 关于QT中显示中文的一些研究
- 关于Qt显示中文
- Qt中显示中文
- Qt中显示中文
- Qt 中显示中文
- Qt 中显示中文
- qt中显示中文
- Qt中显示中文的方法
- 关于QT中中文乱码以及显示常量中有换行符的问题
- 关于Qt控制中边框的显示的一些设置(完善中)
- 关于Qt中文显示问题
- qt中关于中文乱码的问题
- QT中关于QString的一些小结
- qt中关于xml的一些知识点
- 关于mysql中如何显示中文及在myeclipse上关联mysql等的一些小结
- Tiled源码分析(二): 多文档支持
- Windows/Linux下C/C++内存泄露检测工具
- 学习网站收集
- 单链表逆置
- 数据结构实验之栈和队列
- 关于QT中显示中文的一些研究
- 算法之计算 整数乘法
- 数据库的一些基础研究和性能探讨(触发器)
- HTTP协议详解
- 我来请教一个简单java问题,求解答
- Qt Creator的配置和开发初步测试
- 【as3】外部swf动画复制
- Can't connect to X11 window server using ':0.0'
- VC中复制字符串到剪贴板