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. openstack 入门1

    介绍 Rackspace & NASA软件开源项目的组合安装配置复杂基础设施资源的系统管理平台 (网络,计算,存储)个人打井 vs 自来水厂 组件&原理 Horizon -- UI模块 ...

  2. Python: 在Unicode和普通字符串之间转换

    Unicode字符串可以用多种方式编码为普通字符串, 依照你所选择的编码(encoding): <!-- Inject Script Filtered --> Toggle line nu ...

  3. MFC不使用对话框资源模版创建对话框

    在MFC程序中使用对话框时首先在资源模版里创建对话框资源,然后DoModal()或者CReate显示出模式对话框或者非模式对话框,这样创建出的对话框移植性差,从一个工程移动到另一个工程比较麻烦. 在M ...

  4. wiki oi 3115高精度练习之减法

    题目描述 Description 给出两个正整数A和B,计算A-B的值.保证A和B的位数不超过500位. 输入描述 Input Description 读入两个用空格隔开的正整数 输出描述 Outpu ...

  5. uva-11995 - I Can Guess the Data Structure!(栈,优先队列,队列,水题)

    11995 - I Can Guess the Data Structure! There is a bag-like data structure, supporting two operation ...

  6. Java程序如何自动在线升级

    有时候我们的程序需要连接服务器检测新版本,如果发现新版本则需要自动下载升级.这种需求在Linux下还好说,但在windows下如何替换正在运行的程序文件呢? 当然有办法,步骤如下: 1. 将我们的程序 ...

  7. 更新ADT到Android L的方法

    android ADT无法更新到20? 哈哈,有办法,windows 进入host   写入例如以下所有,是的所有.然后在到sdk manager中方可更新 #Google Services STAR ...

  8. iOS7支持九宫格

    Beta4支持九宫格 还没试,等最终版把,现在的有很多bug还比较费电 看网上有人说虽然终于出来了但是还是不如百度搜狗等输入法方便 前几个月在weiphone上还有人问支不支持结果回帖的都说没戏 这算 ...

  9. MYSQLI - mysqli

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

  10. POJ 1142 质因数分解

    只要很朴素的分解就可以了,数据量不大 #include <stdio.h> #include <string.h> #include <stdlib.h> #inc ...