新闻资讯
看你所看,想你所想

setCodecForTr()

setCodecForTr()

setCodeForTr(),Qt函式,包含于标準头档案QTextCodec,类QTextCodec中,主要功能是用于调整qt文字编码,使非英文字元可用。

调用时,使用QObject类中的tr来使用

基本介绍

  • 外文名:setCodeForTr()
  • 语言:C++
  • 程式框架:Qt
  • 成员函式:是
  • 头档案:QTextCodec
  • :QTextCodec
  • 支持:Qt5-(不含)

实例

通过setCodecForTr()实现视窗中文输出
1
//project name:hello//main.cpp#include<QApplication>#include<QLabel>#include<QTextCodec>#include "hello.h"// 此处省略int main(int argc,char * argv[]){QApplication a(argc,argv);QTextCodec::setCodecForTr(QTextCodec::codecForLocale());/*修改字元编码,取消UTF-8带来的乱码,请注意codecForLocale,我们稍后将重点讨论这个函式*/QDialog w;Qlabel label(&w);label.setText(QObject::tr("你好,Qt!"));w.show();return a.exec;}

致命弱点

弱点

可能不少读者会发现,自己解决了中文乱码的难题,感觉这个函式和codecForLocale()很是好用,但是这里要提一下它的致命弱点,其实建议这两个函式不要使用,Qt5以上版本已经取消了这两个函式。
字元集决定了Qt中文字能否正常使用,如果未指定字元集,会直接按照UTF-8来处理字元串。
重新观察以上代码
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
好的,这里的codecForLocale()是一个空参数,这代表着一个很可怕的事实:使用系统指定的字元集。那幺会出现在英文系统、日文系统上再次乱码的情况,就算参数写上("gb18030"),任然解决不了问题。
那幺,真的就没有办法了吗?

解决方案

unicode可以实现跨语言。具体的我们可以使用fromLocal8Bit();
QLabel label;labell.setText(QString::fromLocal8Bit("你好,Qt"));

相关推荐

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:yongganaa@126.com