一直都在代码中使用GBK编码来解决Qt显示中文的问题,即在main()函数中添加下面几句:
然后在发布的应用程序文件夹下建立plugins\codecs,然后将qcncodecs4.dll放到该目录下,也没再出现乱码。但是后来客户反馈说存在乱码。为什么会出现乱码呢?
原来如此。比如写了“汉字”两个字,然后以GBK形式保存在计算机的存储设备中(“汉字”的GBK编码是BA、BA、D7、D6)。然后在读取时,计算机中的二进制码“BA、BA、D7、D6”却不是以同样的GBK形式被解释成“汉字”两个字符。比如说以ISO-88591形式被读取,那么“BA、BA、D7、D6”就会被解释为四个西欧文字了。如果将程序发布到一些非简体中文的国家或地区,可能出现对方的机器上根本没有安装任何中文的编码格式,所以就会出现乱码。
那么,如何彻底解决乱码问题呢?Qt提供了强大的多国语言工具Qt Linguist。
一、编写源码:
实现多语言,1)、首先必须保证每一个用户可见的字符串都使用了tr()函数;2)、在应用程序启动时使用QTranslator载入一个翻译文件(.qm)。如:
#include
#include
#include
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
//载入翻译文件
QTranslator translator;
bool bLoaded = translator.load("readnv_chs");//语言包文件,由linguist工具生成
if (!bLoaded)
{
QMessageBox::warning(NULL,QApplication::tr("Load File Failed"), QApplication::tr("Load readnv_chs.qm Failed!"));
}
app.installTranslator(&translator);
mainwindow w;
w.show();
return app.exec();
}
注意:翻译文件加载的位置必须在界面实例化之前完成。编写好代码后:
二、生成翻译文件:
1)、在.pro文件中添加TRANSLATIONS+=readnv_chs.ts。指明在项目中生成翻译源文件readnv_chs.ts。<.ts>。
2)、执行命令:lupdate -verbose xx.pro。从应用程序的源代码中提取所有用户可见的字符串,生成相应的.ts文件(readnv_chs.ts)。
3)、使用Qt Linguist翻译该应用程序。使用linguist打开readnv_chs.ts文件,对tr()函数的字符串参数进行翻译,然后点击release,生成相应的.qm文件,即readnv_chs.qm。然后将.qm文件放在应用程序目录下即可。