VS+Qt环境下解决中文乱码问题

目录

    • 原因
    • 解决方案
    • 总结

原因

使用VS+Qt出现中文乱码的情况一般都是给控件添加中文文本时出现,而控件需要的字符串类型是QString,默认是utf-8。在 Visual Studio 中,源代码文件的默认执行字符集可能是 Windows 默认的 ANSI 字符集,这个字符集不直接支持 UTF-8 编码中的所有字符,尤其是中文字符或其他非ASCII字符。

解决方案

有两种方法:
1、使用Qstring::fromLocal8Bit()

	//右键菜单
	// 通过fromLocal8Bit的方式将一个const char*类型转成QString
	std::string str = "删除";
	std::cout << str << std::endl;
	
	menu = new QMenu(treeView_);
	menu->addAction(QString::fromLocal8Bit("添加"));
	menu->addAction(QString::fromLocal8Bit(str.c_str()));

VS+Qt环境下解决中文乱码问题_第1张图片
经过测试,这种方式不会影响std::string类型

2、使用#pragma execution_character_set(“utf-8”)预处理指令

在源文件添加这行代码:

#pragma execution_character_set("utf-8")
	std::string str = "删除";
	std::cout << str << std::endl;

	//右键菜单
	menu = new QMenu(treeView_);
	menu->addAction("添加");
	menu->addAction(str.c_str());

通过在源文件的开头添加 #pragma execution_character_set(“utf-8”) 这个指令,你可以告诉编译器,源文件中的字符应该按照 UTF-8 编码来处理。

这个指令只对 Visual Studio 编译器有效,它会影响源文件中的所有字符,包括字符串文字、字符文字和字符字面值。通过设置执行字符集为 UTF-8,可以确保源文件中存在的 Unicode 字符能够被正确处理和显示。
如下图,std::string类型的编码格式被改变,输出乱码。
VS+Qt环境下解决中文乱码问题_第2张图片

总结

开发过程中尽量使用QString::fromLocal8Bit(),但是每次都要写这么长很麻烦。

	#define StdString2QString(x) (QString::fromLocal8Bit(x.c_str()))

	std::string strAdd_ = "添加";
	std::string strDel_ = "删除";
	std::cout << strDel_ << std::endl;

	//右键菜单
	menu = new QMenu(treeView_);
	menu->addAction(StdString2QString(strAdd_));
	menu->addAction(StdString2QString(strDel_));

你可能感兴趣的:(Qt,qt,开发语言)