【VS+QT : 解决“C2001:常量中有换行符“编译问题】

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)末尾加空格

在末尾加一个空格,让最后一个中文汉字与双引号隔开。//效果不理想,外加报错的太多了不好改;
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值