QT使用MSVC编译时报错C2001: 常量中有换行符

news2024/10/7 5:19:35

QT使用MSVC编译时报错C2001: 常量中有换行符

  • Chapter1
    • 1、QT界面菜单栏->工具->选项->文本编辑器,修改成如果编码是UTF-8则添加,如图:
    • 2、QT界面菜单栏->编辑->Slect Encoding...->UTF-8->按编码保存
    • 3、在需要的头文件中加入#pragma execution_character_set("utf-8")即可
    • 2023更新(非常重要):
      • 1.直接换成MinGw编译或者在工程文件pro(MSVC编译器)添加条件编译
      • 2.在工程文件pro添加以下代码,如图:
      • 3.再将工程编译结果清除,重新构建
    • 总结
  • Chapter2 qt彻底解决msvc乱码:配置pro文件


Chapter1

原文链接:https://blog.csdn.net/qq_43521843/article/details/116864525

在新电脑做一个简单的Qt项目时,在debug输出的时候,出现了C2001错误,提示“常量中有换行符”,

比如

ui->pBtnStart->setText(tr("开始"));

就会出现常量中有换行符,肉眼确实没看出来…

但是

ui->pBtnStart->setText(tr("停止"));

却可以顺利通过编译,试了很久改了编码也不行,即便编译通过界面显示却会乱码。

最后通过网上百度,找到了3种解决方式:

1、将字符中的中文字符用英文字母或单词代替,这样解决的好处是代码规范,语言统一,缺点就是没有中文表达那样直接、清晰。(如果是这样我就不会去用中文了!!!)

2、使用中文字符常量时,用QStringLiteral修饰中文字符,格式如QStringLiteral(“中文字符”),这种方法必须在每次使用中文字符时都需要进行修饰,否则还是会出现错误,所以比较麻烦。

3、直接在头文件声明处添加 #pragma execution_character_set(“utf-8”),直接解决此错误。

#pragma execution_character_set("utf-8")

我采用了第3种方法,其步骤如下:

1、QT界面菜单栏->工具->选项->文本编辑器,修改成如果编码是UTF-8则添加,如图:

在这里插入图片描述
在这里插入图片描述

2、QT界面菜单栏->编辑->Slect Encoding…->UTF-8->按编码保存

在这里插入图片描述
在这里插入图片描述

3、在需要的头文件中加入#pragma execution_character_set(“utf-8”)即可

#pragma execution_character_set("utf-8")

2023更新(非常重要):

出现这种情况的可能是在使用Qt的时候采用了msvc编译,源代码文件是无BOM的utf-8编码格式,QtCreator用MinGw编译OK,切换成MSVC后报错。有以下解决方法

1.直接换成MinGw编译或者在工程文件pro(MSVC编译器)添加条件编译

在这里插入图片描述

2.在工程文件pro添加以下代码,如图:

在这里插入图片描述

msvc {
    QMAKE_CFLAGS += /utf-8
    QMAKE_CXXFLAGS += /utf-8
}

特别注意:一旦在pro工程文件中添加了msvc编译条件 ,就不要再需要的头文件中添加#pragma execution_character_set(“utf-8”)这句话了,否则会编译失败。

3.再将工程编译结果清除,重新构建

总结

以下总结是经过上面在 QT5.15.2+MSVC2017 以及源文件格式是 UTF-8 这种前提下,对 MSVC 编译器在编译出可执行文件过程的思路总结

首先有一个前提,windows 下如果不设置 源字符集 和 执行字符集,默认都是 GBK

并且对于 UTF-8 文件而言,MSVC 编译器其实不能直接识别出文件类型来解析文件,所以使用默认本地字符集 GBK 作为源字符集来预处理文件,编译器会根据是否和 执行字符集 一致来决定生成可执行文件的过程中是否需要转码

UTF-8 带 BOM 的文件 MSVC 是可以识别出类型的,把文件当成 UTF-8 来处理。

所以不想出现乱码,这里分 2 种情况分别解释一下措施
源字符集 和 执行字符集 一致,就需要保证使用正确的 QString 接口来保证正确读取二进制数据

比如你文件编码是 VS 默认下的 GB2312,就应该使用 QString::fromLocal8bit()
如果你文件编码是 UTF-8,直接使用 QString() 即可

不一致,需要转码,那么就需要保证转码的过程没有错误

设置好 源字符集 保证代码不被编译器理解错误
执行字符集 设置的是 UTF-8 就使用 QString()
执行字符集 设置的是 GBK 就使用 QString::fromLocal8bit()

其实我的建议是在 windows 下:

source-charset 根据实际文件格式设置好
execution-charset 根据代码中的调用 QString 具体哪种方法也设置好,而且方法也需要统一了。
在这里插入图片描述

原文链接:https://blog.csdn.net/qq_20821119/article/details/120170353

Chapter2 qt彻底解决msvc乱码:配置pro文件

推荐在pro中添加以下3条指令,不管带不带bom都能解决常见的编码问题
即彻底解决C4819警告,C2001错误而不需要转换编码,不需要修改源码!!!

msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
QMAKE_CXXFLAGS_WARN_ON += -wd4819

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1116094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何创建高效的 Python Docker 镜像详解

Docker是打包和部署容器中应用程序的行业标准软件。Docker镜像是构建和运行应用程序的基础,为了充分发挥Docker的潜力,您需要优化镜像以提高资源效率、安全性和性能。这将确保您的应用程序在Docker生态系统内无缝运行。 通过一个实际示例来学习如何实现…

分享一个基于JavaWeb的私人牙科诊所预约挂号就诊系统的设计与实现项目源码调试 lw 开题 ppt

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…

学习笔记---不容错过的顺序表的应⽤~~

目录​​​​​​​ 1. 基于动态顺序表实现通讯录项⽬ 1.1 通讯录📇功能要求 1.2 总体思路分析🧐 1.3 创建初始化销毁顺序表🌞 1.3.1 contact.h 1.3.2 Seqlist.h 1.3.3 contact.c 1.3.4 text.c 1.3.5 代码运行测试 1.3.6 二次代码测…

旋转图像(C++解法)

题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输…

Pytorch深度学习 - 学习笔记

文章目录 Pytorch深度学习1. Pytorch加载数据初认识2. TensorBoard3. Transforms常见的transform 4. torchvision中的数据集使用5. DataLoader使用6. 神经网络6.1 神经网络的基本骨架6.2 卷积层6.3 最大池化的使用6.4 非线性激活6.5 线性层及其他层6.6 小实战及Sequential 7. 损…

苹果手机内存清理怎么做?5招教你拯救内存!

大家的手机内存还能坚持多久呢?无论是什么牌子的手机,只要使用的时间越久,手机的内存必然会越来越小。如果不及时清理手机里的历史缓存、垃圾文件等数据,就会导致手机变得迟缓、卡顿。 那么,我们该怎么做呢&#xff1…

如何使用 GoGoCode 一键 Vue2 转换 Vue3

前言 从今年年初开始,项目开始升级优化,将之前的 Vue2 旧版本整体升级到 Vue3 版本。在重写了几个 Vue 文件后,我发现做的都是一些机械性的工作,效率低且重复性大。于是就试着搜索了一下有没有什么能够批量转换代码格式的工具&am…

SPE(Single Pair Ethernet)

以太网标准 讲SPE(Single Pair Ethernet)之前我们先了解一下以太网标准: CategoryStandardCable length(m)Data rateDuplex CapabilityWiresFast Ethernet10/100BASE-T10010Mb/s to 100Mb/sFull4Gigabit Ethernet1000/10GBAST-T1001Gb/s to …

UOS系统无法开机问题解决

1、问题截图1 : 2、问题截图2 : 3、问题截图3: 解决方案: 修复磁盘无效,建议拷贝数据,还原系统 请先拷贝数据 进live模式在root a或root b 或系统盘找到Home文件夹里-找到用户名-里面就是用户的数据&am…

四川竹哲电商:抖店怎么修改经营类目?

抖店是抖音推出的一款电商工具,通过抖店可以帮助商家在抖音上开展经营活动。在抖店平台上,商家需要选择经营类目,以便在相应的领域展示商品和提供服务。然而,有时候商家可能需要修改经营类目,以适应经营策略调整或扩大…

什么是无磁远传水表?工作原理是怎样的?

无磁远传水表是一种新型的智能水表,与传统水表相比,它具有更高的精度和可靠性,并且可以实现远程读数和控制。那么,无磁远传水表的工作原理是怎样的呢?下面,小编来为大家介绍下什么是无磁水表?它的工作原理是怎样的&a…

MySQL 三大日志(bin log、redo log、undo log)

redo log redo log (重做日志) 是 InnoDB 存储引擎独有的,它让 MySQL有了崩溃恢复的能力,是事务中实现 持久化的重要操作 比如 MySQL 实例宕机了,重启时,InnoDB 存储引擎会使用 redo log 恢复数据,保证数据的持久性与…

数字孪生技术:重塑企业经营的未来

在当今数字化时代,企业经营面临了前所未有的挑战和机遇。数字孪生技术作为新一代数字化工具,正在成为企业走向成功的关键。数字孪生是一种通过数字模型在虚拟世界中模拟和反映物理实体、过程和系统的技术,它为企业经营带来了许多重要的帮助。…

Sourcetree突然打不开,双击打开,图片闪一下就没反应了

解决方案如下: 1.点击图标,右键点击“打开文件所在位置 2.返回上一级,找到Atlassian文件夹 3.进入此文件夹下,删除SourceTree.exe_Url文件夹 4.再双击桌面的Sourcetree图标,可以正常打开。 最近刚遇到此问题&#x…

【广州华锐互动】智慧水务3D可视化数字孪生大屏定制开发

污水处理流程的复杂性需要一种有效的方法进行理解和优化。传统的2D图表和文字描述方法往往无法全面、直观地展示污水处理的各个环节。然而,智慧排水3D数字化管控系统可以为污水处理流程提供更深入、更全面的理解,从而帮助改进污水管理。 首先&#xff0c…

Vue2双向数据绑定的原理

Vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调 Vue双向数据绑定主要有以下几个步骤: 模板解析 事件…

为何说只有 1 种实现线程的方法?

Java全能学习面试指南:https://javaxiaobear.cn 今天我们来学习为什么说本质上只有一种实现线程的方式?实现 Runnable 接口究竟比继承 Thread 类实现线程好在哪里? 实现线程是并发编程中基础中的基础,因为我们必须要先实现多线程…

虹科活动 | 探索全新AR应用时代,虹科AR VIP研讨会广州场回顾!

文章来源:虹科数字化AR 阅读原文:https://mp.weixin.qq.com/s/7tmYR42Tw5XLn70fm8Nnew 主题演讲 本次研讨会,虹科特邀 “工业AR鼻祖” 美国Vuzix公司的首席应用工程师郑慎方先生进行主题演讲,并邀请到了各界的专业人士和企业代表参…

ESRI ArcGIS Pro 3.0-3.0.2图文安装教程及下载

ArcGIS 是由美国著名的地理信息系统公司 Esri 开发的一款地理信息系统软件。ArcGIS Pro是一款功能强大的单桌面 GIS 应用程序,是在桌面上创建和处理空间数据的基本应用程序。ArcGIS Pro支持数据可视化和数据高级分析,可以创建 2D 地图和3D 场景。它支持跨…

无需公网IP,通过内网穿透轻松搭建微信公众号开发本地调试环境!

文章目录 前言1. 配置本地服务器2. 内网穿透2.1 下载安装cpolar内网穿透2.2 创建隧道 3. 测试公网访问4. 固定域名4.1 保留一个二级子域名4.2 配置二级子域名 5. 使用固定二级子域名进行微信开发 前言 在微信公众号开发中,微信要求开发者需要拥有自己的服务器资源来…