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

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

时间: 2024-10-10 03:51:01

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

QString与std::wstring的转换问题

问题描述: 在qt工程中调用QString::fromStdWString()时,老是报错error LNK2019: 无法解析的外部符号...QString::fromStdWString(...)... 原因: 在Qt库中 wchar_t 不是内置类型,所以QT建议我们构建基于Qt的软件时,也不要将 wchar_t 作为内置类型.但是在一些情况下,其他的库构建时可能已经将 wchar_t 作为了内置类型.当使用 std::wstring.QString::toStdWString()和 QS

宽字符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("dddd");    int ic=sizeof(L"kkkk");输出为    il=4,ia=32,ib=5,ic=10为什么ia=32 ?wstring到底对L"kkkk"做了什么? http://www.debugease.com/vc/2171

std::wstring跨dll 崩溃

今天用个测试exe调用了个dll,有个接口返回std::wstring,经调试发现挂在该函数return之后,怀疑是string不适合作为返回值,百度一番发现下面这篇解释的很详细. STL跨平台调用会出现很多异常,你可以试试. STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释. 原因分析: 一句话-----如果任何STL类使用了静态变量(无论是直接还是间接使用),那么就不要再写出

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

807down vote string? wstring? std::string is a basic_string templated on a char, and std::wstring on a wchar_t. char vs. wchar_t char is supposed to hold a character, usually a 1-byte character. wchar_t is supposed to hold a wide character, and then,

std::wstring std::string w2m m2w

static std::wstring m2w(std::string ch, unsigned int CodePage = CP_ACP) { if (ch.empty())return L""; std::wstring ret; DWORD dwOutSize = 0; dwOutSize = MultiByteToWideChar(CodePage, 0, ch.c_str(), -1, NULL, 0); ret.resize(dwOutSize - 1); MultiBy

qt5 qDebug()QString 解决中文输出问题

首先加上头文件 #include<QTextCodec> 然后设置 QTextCodec*t=QTextCodec::codecForName("GBk"); 最后转换 QString s=t->toUnicode("行了"); 结果

数值类型与std::string的相互转换

1.使用std::stringstream: //将in_value值转换成out_type类型 template<class out_type, class in_value> out_type StringTo(const in_value& t) { std::stringstream sstream; sstream << t; //向流中传值 out_type result; //这里存储转换结果 sstream >> result; //向resul

QT之字符串类

前面我们讲解了开发计算器的信号处理机制,接下来我们来讲讲关于字符串显示的问题. 我们都知道 C 语言不支持真正意义上的字符串:C 语言是用字符数组和一组函数来实现字符串操作的:C 语言不支持自定义类型,因此我们无法获得字符串类型.从 C 到 C++ 的进化过程引入了自定义类型,在 C++ 中可以通过类完成字符串类型的定义.C++ 中的STL标准库又是怎么一回事呢?STL是意义上需要与 C++ 一同发布的标准库,它是一套以模板技术完成的 C++ 类库,包含了常用的算法和数据结构,同样也包含了字符串

wchar_t内置还是别名(wchar_t在windows下是16整数的别名,在linux等平台下是32位整数的别名。MSVC2008开始默认是/Zc:wchar_t)

接前一篇C++ ABI之名字改编(以Qt为例),继续看看C++名字改编相关的问题. 问题 MSVC 有一对选项/Zc:wchar_t- 与 /Zc:wchar_t控制wchar_t 于是 wchar_t 可以是 unsigned short 或 __wchar_t(称为原生类型?) 的别名 两个东西混用会怎么样? 首先考虑,会混用么?,是杞人忧天么? 由于 Qt 为 MSVC 提供的二进制包采用的前者/Zc:wchar_t-.考虑: 如果你编译自己的Qt程序时,启用了后者,会怎么样? 如果Qt程