Qt中文问题:乱码、路径有中文或空格等
1、路径有中文或空格
不使用toStdString()、fromStdString(),请使用toLocal8Bit().constData()、fromLocal8Bit()
QString inputDir = ui.lineEdit_inputDir->text(); QDir dirTxt(inputDir); QStringList txtFilters; txtFilters << "*.txt"; QFileInfoList txtList = dirTxt.entryInfoList(txtFilters, QDir::Files); for (int i = 0; i < txtList.size(); i++) { std::string txtPath = txtList[i].absoluteFilePath().toLocal8Bit().constData(); //正确 QString txt = QString::fromLocal8Bit(txtPath.c_str()); //正确 QString txt2 = QString::fromStdString(txtPath); //乱码 QString txt3 = txtPath.c_str(); //乱码 }
OpenCV的imwrite路径有空格时会保存失败,imread没有问题。请使用cv::String包裹,可解决空格问题
QString outPath = outputDir + "/" + list.last(); //该路径即有中文又有空格 cv::imwrite(cv::String(outPath.toLocal8Bit().constData()), result);
2、Qt中文乱码
2.1 在Qt Creator中设置如下:
编辑——Preferences——文本编辑器——行为

2.2 头文件中,加入
#if defined(_MSC_VER) && (_MSC_VER >= 1600) # pragma execution_character_set("utf-8") #endif
3、VS开发Qt中文乱码
3.1 文件保存为utf8带BOM的,如下插件可以在编辑文件并保存后变成utf8带BOM格式
VS2019可以用如下两个插件


VS2015使用如下插件

3.2 头文件中,加入
#if defined(_MSC_VER) && (_MSC_VER >= 1600) # pragma execution_character_set("utf-8") #endif
总结下就是如下操作:
utf8 带 BOM,代码中添加
#if defined(_MSC_VER) && (_MSC_VER >= 1600)
# pragma execution_character_set("utf-8")
#endif
使用VSCode或Notepad++查看并转换代码文件格式为utf8带BOM

4、tr知识
如果需要国际化,那么tr包裹住即可。
用tr包住英文,源码英文,然后提供英文到其他语言的翻译包
用tr包住中文,源码用中文,然后提供中文到其他语言的翻译包

浙公网安备 33010602011771号