QT学习笔记-QT5.15 + MSVC编译套件时编译日志及运行日志日志中文乱码解决
- 0、基础环境
- 1、QtCreator中的基本设置
- 编辑->首选项->文本编辑器
- 2、问题1:MSVC编译日志乱码问题解决
- 问题描述
- 解决方法
- 3、问题2:MSVC构建套件编译后程序运行日志乱码问题
- 问题描述
- 解决方法
0、基础环境
操作系统:Windows10专业版
QT版本:QT5.15.2
QtCreator版本:9.0.2
MSVC版本:MSVC 2019 64bit
C/C++编译器:Microsoft Visual C++ Compiler 17.1.32328.378(amd64)
调试器:Auto-detected CDB at C:\Program Files\Windows Kits\10\Debuggers\x64\cdb.exe
1、QtCreator中的基本设置
编辑->首选项->文本编辑器
文件编码的设置都是采用的默认值UTF-8,如下图:
2、问题1:MSVC编译日志乱码问题解决
问题描述
当qt的项目采用MSVC构建套件对项目代码进行编译时,在QtCreator的编译输出窗口中显示的编译日志部分内容显示乱码,此处的乱码不一定是中文乱码,如下图:
解决方法
在编辑->首选项->构建套件(Kit)-》MSVC构建套件设置中勾选[Force UTF-8 MSVC compiler output],如下图:
然后点击应用或直接确定,在对项目代码执行重新构建操作,则编译输出中的编译日志已能正常显示没有乱码了,如下图:
3、问题2:MSVC构建套件编译后程序运行日志乱码问题
问题描述
在QtCreator中对程序进行调试运行时会在QtCreator的应用程序输出窗口(也可以认为是控制台)中显示程序中的qDebug()日志,这部分日志中的乱码通常是中文显示乱码。
代码实例:
if (!operateResult.isSuccess())
{qWarning() << "Name = " << this->getName() << ",建立与" << this->serverIp << ":" << this->serverPort << "的握手失败...";connectResult = false;
}
else
{this->errCnt = 0;this->state = 1;qDebug() << "Name = " << this->getName() << ",成功与" << this->serverIp << ":" << this->serverPort << "建立了连接...";
}
如下图:
解决方法
网上查阅的话通常会介绍3种方法:
1、第1种是通过代码增加处理编码格式的方法,个人认为这种方法最不可取,会导致原始代码中增加很多无用代码,即增加了工作量又降低了代码的可读性。
2、第2种方法还是修改代码,在头文件或者cpp源码文件的#include之后增加一行
#pragma execution_character_set("utf-8") //实现在日志输出中解决中文乱码问题,测试有效
这种方法有效,个人还是不推荐,还是因为要修改源码,虽然只有一行。
3、第3种方法,个人强烈推荐的方法,就是在pro文件中增加如下代码。(亲测有效)
# 解决msvc构建套件下qtcreator控制台日志中文乱码问题
msvc {QMAKE_CFLAGS += /utf-8QMAKE_CXXFLAGS += /utf-8
}
注意写法: { 与 msvc要在一行,中间有一个空格,如需奥把 { 写到msvc的下一行是编译不过去的。
如下图:
然后重新构建后,运行日志中文显示正常,如下图: