Qt中中文相关显示,经常出现各种花式乱码,最近整理了一下遇到过的乱码情况以及解决办法。
情况1:编辑器显示乱码,乱码现象是注释等中文内容乱码,这种乱码是源代码由不同编辑器实现 ,出现代码不兼容,windows下很多代码是gbk编码
解决办法:修改qt设置即可

情况2:控件显示乱码,包含windows和linux
windows如图乱码问题

在头文件加上以下语句编译即可
#pragma execution_character_set("utf-8")
添加之后如下

如果是VS+QT环境可以试试在.pro文件中添加以下语句
QMAKE_CXXFLAGS += /utf-8
除此之外还有其他写法能解决,如以下写法
QString::fromLocal8Bit("提示")
QString strInfo = QStringLiteral("提示");
linux控件显示乱码,效果图暂时没有,多半是有于原代码是gbk格式编码
解决方法如下
QTextCodec *corder= QTextCodec::codecForName ( "GBK" );
QMessageBox::information(this, corder->toUnicode("提示"), corder->toUnicode("中文内容"));
注意:此处corder->toUnicode需加在中文字符源头处。
情况3:qDebug输出时中文乱码问题
解决办法:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF8"));
情况4:qDebug()输出乱码在以上方式都不行的情况下,可尝试用输出到终端的方式,添加后,清理->重新构建才能生效
CONFIG += console

获取编解码器名称可按如下打印
// 获取编解码器名称
qDebug() << QTextCodec::codecForLocale()->name();
情况6:MinGW编译qt程序乱码
在Pro中添加以下代码
# 强制源码编码为UTF-8
QMAKE_CFLAGS += -finput-charset=UTF-8
QMAKE_CXXFLAGS += -finput-charset=UTF-8
# 输出字符串编码为UTF-8(针对MinGW)
QMAKE_CFLAGS += -fexec-charset=UTF-8
QMAKE_CXXFLAGS += -fexec-charset=UTF-8
# 禁用Qt的默认编码转换(可选,视情况而定)
DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
//确保.ui文件保存为 UTF-8 编码(Qt 默认如此)
UIC_FLAGS += -encoding utf-8
建议多用QStringLiteral
原因如下:

本文详细阐述了Qt开发中遇到的各种中文显示乱码问题,包括编辑器编码不兼容、控件显示问题及qDebug输出的解决方案。通过设置编码、添加编译指令和使用特定函数处理,帮助开发者避免和修复乱码困扰。
3212

被折叠的 条评论
为什么被折叠?



