博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QString与中文,QString与std::wstring的相互转换(使用fromStdWString和u8关键字)(转)...
阅读量:7185 次
发布时间:2019-06-29

本文共 1239 字,大约阅读时间需要 4 分钟。

Qt版本:5.5.1

 

Qt的QString功能丰富,对非英语语言的支持也不是问题,但支持得不够直接。例如,像

1
QString str(
"死亡使者赛维"
);

这样直接用带中文的字符串进行构造,那么用QMessageBox显示str时将出现乱码。如果使用fromLocal8Bit、fromLatin1这样的函数,又依赖本地计算机的显示语言,所以它们不是好方法。

 

显式地使用宽字符(wchar_t)或UTF-8才是好方法。

1
2
QString str0(QString::fromStdWString(L
"数学分析"
));
QString str1(QString::fromUtf8(u8
"高等代数"
)); 
// C++11

UTF-8的字符串字面量是C++11的内容,如果你的编译器不支持它,可以用第一种方式。这样,不管本地的语言是什么,都是可以通吃的。

 

测试一下吧!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void 
MsgBox(
const 
QString &s)
{
    
QMessageBox::information(
nullptr
, QString::fromUtf8(u8
"标题"
), s, QMessageBox::Ok);
}
 
void 
MainWindow::on_pushButton_clicked()
{
    
QString str0(QString::fromStdWString(L
"数学分析"
));
    
QString str1(QString::fromUtf8(u8
"高等代数"
));
    
QString str2(QString::fromUtf8(u8
"ステンカラーのコート 【折式立领的外套】"
)); 
// 日文也不是问题
    
QString s(QString::fromUtf8(u8
"\r\n"
));
 
    
MsgBox(str0 + s + str1 + s + str2);
}

运行结果:

 

最后给出QString与std::wstring的相互转换。

从std::wstring到QString,用QString的静态成员函数QString::fromStdWString。它接受一个std::wstring类型的参数,返回对应的QString。

1
2
std::wstring str_STL(L
"实变函数论"
);
QString str_Qt = QString::fromStdWString(str_STL);

从QString到std::wstring,用QString的成员函数QString::toStdWString。它返回一个std::wstring。

1
std::wstring str_STL = str.toStdWString();
 

 

转载于:https://www.cnblogs.com/stones-dream/p/9938448.html

你可能感兴趣的文章
android studio的jks,获取*.jks签名的方法(Android studio)
查看>>
html 文本框 onchange,[原创]关于html页面中Input(文本框)控件OnChange事件的触发条件...
查看>>
dom操作插入html代码,DOM操作
查看>>
django html超链接传参数,在django模板中实现超链接配置
查看>>
面试如何让自己赢在细节
查看>>
HyperV2012的学习,从这里开始
查看>>
云原生与云原生应用概念解析
查看>>
创业成功的关键是能够找到合适的合伙人
查看>>
FireEye:2012年下半年高级威胁分析报告
查看>>
2018世界杯决赛:谁的选择多谁就会赢球!
查看>>
程序员教你如何追女生
查看>>
哈夫曼树构造算法的正确性证明
查看>>
我谈Web程序难测试
查看>>
nginx日志按照天进行分割
查看>>
Networker 8.1异机恢复Oracle 11gR2
查看>>
shell实现文件名相同路径不同的批量复制
查看>>
五、性能监视(7)SQLDIAG
查看>>
多个无线AP间无线组网实例
查看>>
服务器架构之性能扩展-第四章(5)
查看>>
20款Notepad++插件下载和介绍
查看>>