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();
 

http://my.oschina.net/jthmath/blog/521458

QString与中文,QString与std::wstring的相互转换(使用fromStdWString和u8关键字)的更多相关文章

  1. 如何使用 window api 转换字符集?(std::string与std::wstring的相互转换)

    //宽字符转多字节 std::string W2A(const std::wstring& utf8) { int buffSize = WideCharToMultiByte(CP_ACP, ...

  2. 与QString("我是中文")完全一样,你必须告诉tr这个窄字符串是何种编码?你不告诉它,它就用latin1。于是所谓的乱码问题就出来了。

    在论坛中漂,经常遇到有人遇到tr相关的问题.用tr的有两类人: (1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr (2)另一类人,确实是出于国际化的需要,将需要在界面上显示的 ...

  3. std::string, std::wstring, wchar_t*, Platform::String^ 之间的相互转换

    最近做WinRT的项目,涉及到Platform::String^  和 std::string之间的转换,总结一下: (1)先给出源代码: std::wstring stows(std::string ...

  4. std::string与std::wstring互相转换

    作者:zzandyc来源:CSDN原文:https ://blog.csdn.net/zzandyc/article/details/77540056 版权声明:本文为博主原创文章,转载请附上博文链接 ...

  5. C++ MFC std::string转为 std::wstring

    std::string转为 std::wstring std::wstring UTF8_To_UTF16(const std::string& source) { unsigned long ...

  6. 对std::string和std::wstring区别的解释,807个赞同,有例子

    807down vote string? wstring? std::string is a basic_string templated on a char, and std::wstring on ...

  7. 宽字符std::wstring的长度和大小问题?sizeof(std::wstring)是固定的32,说明std::wstring是一个普通的C++类,而且和Delphi不一样,没有负方向,因为那个需要编译器的支持

    std::wstring ws=L"kkkk";    int il=ws.length();    int ia=sizeof(ws);    int ib=sizeof(&qu ...

  8. std::wstring

    std::wstring主要用于 UTF-16编码的字符, std::string主要用于存储单字节的字符( ASCII字符集 ),但是也可以用来保存UTF-8编码的字符. UTF-8和UTF-16是 ...

  9. std::wstring std::string w2m m2w

    static std::wstring m2w(std::string ch, unsigned int CodePage = CP_ACP) { if (ch.empty())return L&qu ...

随机推荐

  1. dlib库学习之一

    dlib库学习之一 1.介绍 跨平台 C++ 通用库 Dlib 发布 ,带来了一些新特性,包括概率 CKY 解析器,使用批量同步并行计算模型来创建应用的工具,新增两个聚合算法:中国低语 (Chines ...

  2. design pattern factory method #Reprinted#

    引入人.工厂.和斧子的问题: (1),原始社会时,劳动社会基本没有分工,需要斧子的人(调用者)只好自己去磨一把斧子,每个人拥有自己的斧子,如果把大家的石斧改为铁斧,需要每个人都要学会磨铁斧的本领,工作 ...

  3. select_related

    作用:减少DB访问次数 from django.db import models class Blog(models.Model): name = models.CharField(max_lengt ...

  4. Sphnix

    Sphinx高性能的搜索引擎(简单.强大.实用) http://blog.csdn.net/lgm252008/article/details/5373354

  5. kinect for windows - DepthBasics-D2D详解之二

    通过上篇文章,我们了解了在视频图像从kinect开发包传输到应用程序之前的一系列初始化工作,那么这篇文章主要来叙述,如何将一帧图像数据获取到,并显示出来的. 更新窗口是在Run函数消息处理中,当Kin ...

  6. .NET通用权限系统快速开发框架源代码

    有兴趣的朋友欢迎加群讨论:312677516 一.开发技术:B/S(.NET C# ) 1.Windows XP以上 (支援最新Win 8) 2.Microsoft Visual Studio 201 ...

  7. MYSQLI - mysqli

    PHP MysqlI操作数据库 1连接数据库. //procedural style$mysqli =  mysqli_connect('host','username','password','da ...

  8. 【SVN】is out of date

    右击项目(team->update 或者 team->freash/cleanup),再操作,提交就可以了.

  9. javascript 数组部分

    <html> <body> <script type="text/javascript"> var arr = new Array(6) arr ...

  10. python读写xml

    来自http://blog.csdn.net/liuyuehui110/article/details/7287897 备份防止链接失效 一.XML的读取. 在 NewEdit 中有代码片段的功能,代 ...