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包住中文,源码用中文,然后提供中文到其他语言的翻译包

【嵌入式——QT】多语言界面-CSDN博客

posted @ 2022-02-15 08:56  夕西行  阅读(662)  评论(0)    收藏  举报