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文件以后报错就消失了。