1、问题描述
VStudio 编译QT程序,在建立过程期间,经常会出现奇怪的错误,如 “ C2001 :常量中有换行符”,如下图所示:
2、原因分析
vsstudio 采用GBK格式编码,qt采用utf-8模式编码;
3、解决方案
我遇到过很多次这种问题,一般如果不是真的未定义,一般就是编码的问题,我是结合了1-2-3才改好的。
(1)通过在项目里设置编译选项,/utf-8
操作: 项目->右键属性->C/C++ -> 命令行,在下方输入框添加 /utf-8,就会在编译时采用utf-8编码来编译。
(2)修改VS编码
1.单击“工具”—>“自定义”命令,弹出“自定义”对话框。
2.单击“命令”标签,进入“命令”选项卡。
3.在“菜单栏”下拉列表中,选择“文件”选项。
4.单击“添加命令”按钮,弹出“添加命令”对话框。
5.在“类别”列表中,选择“文件”选项;在“命令”列表中,选择“高级保存选项”选项。
6.单击“确定”按钮,关闭“添加命令”对话框。
7.选中“控件”列表中的“高级保存选项”选项,单击“上移”或者“下移”按钮,调整该命令的位置。
8.单击“关闭”按钮,完成“高级保存选项”命令的添加操作。
9.VS菜单栏,单击“文件”按钮,选择“高级保护选项”,选择 “Unicode(UTF-8 无签名)-代码页 65001”,单击“确定”按钮;
(3)转换编码器
在主函数中添加如下代码:
QTextCodec *codec = QTextCodec::codecForName("utf-8"); 获取UTF8编解码器,解码方式为utf-8
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0)) //判断QT当前版本
QTextCodec::setCodecForCStrings(codec); //设置QString用于转换const char*和QByteArrays的编解码器。如果编解码器为0(默认值),QString将采用Latin-1
QTextCodec::setCodecForTr(codec); //设置QObject::tr()的编码器。如果codec为0(默认值),tr()将采用Latin-1
#endif
实际应用中,如下:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
QTextCodec *codec = QTextCodec::codecForName("utf-8"); 获取UTF8编解码器,解码方式为utf-8
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0)) //判断QT当前版本
QTextCodec::setCodecForCStrings(codec); //设置QString用于转换const char*和QByteArrays的编解码器。如果编解码器为0(默认值),QString将采用Latin-1
QTextCodec::setCodecForTr(codec); //设置QObject::tr()的编码器。如果codec为0(默认值),tr()将采用Latin-1
#endif
w.showMaximized();
//w.show();
return a.exec();
}
(4)末尾加空格
在末尾加一个空格,让最后一个中文汉字与双引号隔开。//效果不理想,外加报错的太多了不好改;