《精通Qt4编程》一书2.2节一段代码如下:
int main( int argc, char * argv[]){ QApplication a(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForName( " gb18030 " )); QTranslator translator; { ........ } .....}
这是一个登录框程序的一部分,编译无报错,运行时Qt creator的Application output中显示一行乱码,对话框也是乱码。于是google发现网上有详细说明,总结起来就是,在QT中默认的是unicode,windows中为GBK,linux中为UTF-8编码,可见此书应是在windows下的实例,而我使用的是ubuntu,gb18030自然是行不通的,因此更为utf-8中文显示就正常了。
通常在windows环境下,对于中文编码,需要在main.cpp中加上以下几行代码:
QTextCodec *gbk = QTextCodec::codecForName("gb18030");
QTextCodec::setCodecForTr(gbk); // 设置传给tr函数时的默认字符串编码,GUI设计中最常用的一种 QTextCodec::setCodecForLocale(gbk); // 设置对本地文件系统读写时候的默认编码格式,比如读取文件或qDebug()打印输出信息时 QTextCodec::setCodecForCStrings(gbk); //设置字符常量或者QByteArray构造QString对象时使用的编码方式
同理,linux下:
QTextCodec *utg8 = QTextCodec::codecForName("utf-8");
QTextCodec::setCodecForTr(utg8 ); QTextCodec::setCodecForLocale(utg8 ); QTextCodec::setCodecForCStrings(utg8 );
至于当时编译器中的那行乱码是程序提示“没有支持中文的QT……”,原因是我把translations敲成tranlators了,自然就找不到翻译文件。
转载于:https://www.cnblogs.com/iambobor/archive/2011/05/14/2046504.html