转义符,该如何处理

转义符
    QPushButton *qb1 = new QPushButton("abc",this);
    qb1->setText("退出");//这里退出要加哪个转换符号
------解决思路----------------------
引用:
	// 解决中文乱码
QTextCodec *codec = QTextCodec::codecForLocale();
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);


这3行setCodecForXXXX 隐含了很多错误。永远不要这3行代码一块用,非要用的话,最后一个setCodecForCStrings()代码足够了。

另外:永远不要用QTextCodec::codecForLocale() 来设置其他setCodecForXXXX编码,直接用GBK或UTF8 或其他
------解决思路----------------------
引用:
Quote: 引用:

Qt4把字面字符串常量传给QString的构造函数时,使用的是QString::fromAscii,QString::fromAscii实际使用QTextCodec::codecForCStrings来解析,Qt4中QTextCodec::codecForCStrings默认为utf-8。在gcc中,运行字符集默认为utf-8,所以用gcc构建程序时中文可以直接QString("中文"),但是用MSVC时,运行字符集默认为ANSI(即GBK),所以只需要调用QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());即可。

Qt5中因为性能方面的考虑去掉了QString::fromAscii、QTextCodec::codecForCStrings和QTextCodec::setCodecForCStrings,把字面字符串常量传给QString的构造函数时,使用的是QString::fromUtf8,用gcc没问题。MSVC需要用QString::fromLocal8Bit("中文")或者用QStringLiteral("中文")产生一个编译时的QString。


首先:Qt4,codecForCStrings() 默认不是UTF8,你后面Qt4的论断也有问题。

其次:Qt5,去掉那些东西,不是性能方面的原因。另外,MSVC2008/MSVC2010/MSVC2013 支持使用utf8 作为执行字符集。但 MSVC2005/MSVC2012 不支持。

我很抱歉对QTextCodec::codecForCStrings的默认值做了假设,那我修正一下,Qt4在gcc下用QString(const char*)中文需要先QTextCodec::setCodecForCStrings("utf-8");或QString::fromUtf8("中文");

至于Qt5为何移除codecForCStrings可以参考这张图片:
转义符,该如何处理

另外我并没有说MSVC不支持utf-8运行字符集,就2010来说,需要安装sp1,然后需要#pragma execution_character_set("utf-8")这条预处理指令。