当前位置: 首页 > ai >正文

Qt函数setText设置中文导致乱码/程序崩溃/报错:常量中有换行符

笔者在基于C++的Qt开发中,对组件设置中文名称则使程序崩溃,设置为英文则正常运行,报错代码如下:

QPushButton *btn_begin;
btn_begin = new QPushButton();
btn_begin->setText("开始");

根本原因是因为:源代码和编译器的编码设置不兼容

比如:源代码使用的是UTF-8编码,而编译器使用的是GBK编码。如果你使用的MSVC编译器(也就是Visual Studio C++的环境),则默认情况下不会将你的源代码视为utf-8编码。

源代码一般有三种编码方式:UTF-8(无BOM)、UTF-8(有BOM)、GBK

常用的编译器,以Qt自带的MinGW-g++、Visual Studio C++编译器MSVC-cl++、Linux g++为例,源代码和编译器不同的组合,会导致不同的运行结果,详见原文:彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK) - 阳光下的小土豆 - 博客园

此处截取了作者的总结:

对应的解决方式总结:

情形1:如果源代码是UTF-8 +BOM的编码方式,有两种方法可以解决报错:

方法1. 在文件中加入下面的语句

# pragma execution_character_set("utf-8")

方法2. 在.pro文件中加入下面的语句

QMAKE_CXXFLAGS += /utf-8

情形2:如果源文件是UTF-8+无BOM的编码方式,一定不能加

#pragma execution_character_set(“utf-8”),不然会产生乱码。就只能用上面的方法2:修改.pro文件

至于如何判断源文件的编码方式,可以通过上面给的博客链接中,不同组合下的运行结果不同,倒推一下。笔者是报错:常量中有换行符,按方法2修改了.pro文件以后报错就消失了。

http://www.xdnf.cn/news/9205.html

相关文章:

  • html css js网页制作成品——HTML+CSS+js醇香咖啡屋网页设计(5页)附源码
  • 大模型应用开发第三讲:大模型是Agent的“大脑”,提供通用推理能力(如GPT-4、Claude 3)
  • inviteflood:基于 UDP 的 SIP/SDP 洪水攻击工具!全参数详细教程!Kali Linux教程!
  • 从零实现本地语音识别(FunASR)
  • 在AIX环境下修改oracle 11g rac的IP地址
  • 使用requestAnimationFrame编写动画效果或者处理大量数据
  • 时序数据库IoTDB安装学习经验分享
  • 第三届全国先进技术成果转化大会成功举办 中科亿海微携品亮相
  • 【premiere教程】【01】【跑个流程】
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 6】【高通蓝牙hal主要流程介绍-下】
  • Java 基础全面解析
  • Kettle 远程mysql 表导入到 hadoop hive
  • WPF【11_7】WPF实战-重构与美化(ViewModel的嵌套与分解、海量数据不要Join)
  • OpenCV CUDA模块图像处理------颜色空间处理之GPU 上对两张带有 Alpha 通道的图像进行合成操作函数alphaComp()
  • 【洛谷P9303题解】AC代码- [CCC 2023 J5] CCC Word Hunt
  • ubuntu22.04 安装 SecureCRT8.7.3
  • 没有经验能考OCP认证吗?
  • 视频逐帧提取图片的工具
  • 拆解汽车HMI设计:如何用3D可视化提升驾驶安全感?
  • RagFlow参数配置测试
  • 2025.5.27学习日记 linux三剑客 sed与正则表达式
  • 安卓开发用到的设计模式(3)行为型模式
  • Day31 -js应用 -实例:webpack jQuery的使用及其隐含的安全问题
  • C语言-指针
  • 目前可用随时更新,8种使用Claude4的方法!
  • 跨协议协同智造新实践:DeviceNet-EtherCAT网关驱动汽车焊接装配效能跃迁
  • word里面如何保存高清图片
  • idea 控制台 彩色打印日志
  • 主键与唯一键详解:概念、区别与面试要点
  • 【Bluedroid】init_stack_internal 函数全流程源码解析