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,如下图:
QT学习笔记-QT5.15 + MSVC编译套件时编译日志及运行日志日志乱码解决-LMLPHP
QT学习笔记-QT5.15 + MSVC编译套件时编译日志及运行日志日志乱码解决-LMLPHP

2、问题1:MSVC编译日志乱码问题解决

问题描述

当qt的项目采用MSVC构建套件对项目代码进行编译时,在QtCreator的编译输出窗口中显示的编译日志部分内容显示乱码,此处的乱码不一定是中文乱码,如下图:
QT学习笔记-QT5.15 + MSVC编译套件时编译日志及运行日志日志乱码解决-LMLPHP

解决方法

在编辑->首选项->构建套件(Kit)-》MSVC构建套件设置中勾选[Force UTF-8 MSVC compiler output],如下图:
QT学习笔记-QT5.15 + MSVC编译套件时编译日志及运行日志日志乱码解决-LMLPHP
然后点击应用或直接确定,在对项目代码执行重新构建操作,则编译输出中的编译日志已能正常显示没有乱码了,如下图:
QT学习笔记-QT5.15 + MSVC编译套件时编译日志及运行日志日志乱码解决-LMLPHP

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 << "建立了连接...";
}

如下图:
QT学习笔记-QT5.15 + MSVC编译套件时编译日志及运行日志日志乱码解决-LMLPHP

解决方法

网上查阅的话通常会介绍3种方法:
1、第1种是通过代码增加处理编码格式的方法,个人认为这种方法最不可取,会导致原始代码中增加很多无用代码,即增加了工作量又降低了代码的可读性。
2、第2种方法还是修改代码,在头文件或者cpp源码文件的#include之后增加一行

#pragma execution_character_set("utf-8")   //实现在日志输出中解决中文乱码问题,测试有效

这种方法有效,个人还是不推荐,还是因为要修改源码,虽然只有一行。
3、第3种方法,个人强烈推荐的方法,就是在pro文件中增加如下代码。(亲测有效)

# 解决msvc构建套件下qtcreator控制台日志中文乱码问题
msvc {
    QMAKE_CFLAGS += /utf-8
    QMAKE_CXXFLAGS += /utf-8
}

如下图:
QT学习笔记-QT5.15 + MSVC编译套件时编译日志及运行日志日志乱码解决-LMLPHP
然后重新构建后,运行日志中文显示正常,如下图:
QT学习笔记-QT5.15 + MSVC编译套件时编译日志及运行日志日志乱码解决-LMLPHP

08-03 08:30