ToStdWStringAndBuiltInWchar/zh: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
'''简体中文''' [[toStdWStringAndBuiltInWchar|English]]
'''简体中文''' [[toStdWStringAndBuiltInWchar|English]]<br />[[Category:HowTo]]<br />[[Category:snippets]]<br />[[Category:SimplifiedChinese::HowTo]]<br />[[Category:SimplifiedChinese::snippets]]


=QString、std::wstring 与内置的 wchar_t=
= QString、std::wstring 与内置的 wchar_t =


==问题陈述==
== 问题陈述 ==


Qt 建议我们构建基于Qt的软件时,像Qt库自身一样,不要将 wchar_t 作为内置类型。在一些情况下,这不是所期待的,或者是不可能的,因为其他的库构建时可能已经将 wchar_t 作为了内置类型。当使用 std::wstring、QString::toStdWString()和 QString::fromStdWString() 将导致链接错误.
Qt 建议我们构建基于Qt的软件时,像Qt库自身一样,不要将 wchar_t 作为内置类型。在一些情况下,这不是所期待的,或者是不可能的,因为其他的库构建时可能已经将 wchar_t 作为了内置类型。当使用 std::wstring、QString::toStdWString()和 QString::fromStdWString() 将导致链接错误.


==可能的解决方案==
== 可能的解决方案 ==


Windows 使用 utf-16 作为本身字符的编码,Qt也是如此。借助这个信息我们可以使用下面的代码来规避这个问题:
Windows 使用 utf-16 作为本身字符的编码,Qt也是如此。借助这个信息我们可以使用下面的代码来规避这个问题:


注意 std::wstring 在其他平台下可能使用 uint32 (对于ucs-4/utf-32) 来实现。
<code>/*! Convert a QString to an std::wstring '''/<br />std::wstring qToStdWString(const QString &amp;str)<br />{<br />#ifdef _MSC_VER<br /> return std::wstring((const wchar_t''')str.utf16());<br />#else<br /> return str.toStdWString();<br />#endif<br />}


===Categories:===
/*! Convert an std::wstring to a QString '''/<br />QString stdWToQString(const std::wstring &amp;str)<br />{<br />#ifdef _MSC_VER<br /> return QString::fromUtf16((const ushort''')str.c_str());<br />#else<br /> return QString::fromStdWString(str);<br />#endif<br />}</code>


* [[:Category:HowTo|HowTo]]
注意 std::wstring 在其他平台下可能使用 uint32 (对于ucs-4/utf-32) 来实现。
* [[:Category:SimplifiedChinese|SimplifiedChinese]]
** [[:Category:SimplifiedChinese::HowTo|HowTo]]
* [[:Category:SimplifiedChinese::snippets|snippets]]
 
* [[:Category:snippets|snippets]]

Revision as of 10:53, 24 February 2015

简体中文 English



QString、std::wstring 与内置的 wchar_t

问题陈述

Qt 建议我们构建基于Qt的软件时,像Qt库自身一样,不要将 wchar_t 作为内置类型。在一些情况下,这不是所期待的,或者是不可能的,因为其他的库构建时可能已经将 wchar_t 作为了内置类型。当使用 std::wstring、QString::toStdWString()和 QString::fromStdWString() 将导致链接错误.

可能的解决方案

Windows 使用 utf-16 作为本身字符的编码,Qt也是如此。借助这个信息我们可以使用下面的代码来规避这个问题:

/*! Convert a QString to an std::wstring '''/<br />std::wstring qToStdWString(const QString &amp;str)<br />{<br />#ifdef _MSC_VER<br /> return std::wstring((const wchar_t''')str.utf16());<br />#else<br /> return str.toStdWString();<br />#endif<br />}

/*! Convert an std::wstring to a QString '''/<br />QString stdWToQString(const std::wstring &amp;str)<br />{<br />#ifdef _MSC_VER<br /> return QString::fromUtf16((const ushort''')str.c_str());<br />#else<br /> return QString::fromStdWString(str);<br />#endif<br />}

注意 std::wstring 在其他平台下可能使用 uint32 (对于ucs-4/utf-32) 来实现。