Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.
ToStdWStringAndBuiltInWchar: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
'''English''' [[toStdWStringAndBuiltInWchar SimplifiedChinese|简体中文]] | '''English''' [[toStdWStringAndBuiltInWchar SimplifiedChinese|简体中文]] | ||
[[Category:HowTo]] | |||
[[Category:snippets]] | |||
= QString, std::wstring and built-in wchar_t = | = QString, std::wstring and built-in wchar_t = | ||
Line 5: | Line 7: | ||
== Problem statement == | == Problem statement == | ||
Qt advises to build your Qt based software without wchar_t as built-in type, just like the Qt libraries themselves. In some cases this is not desired by the environment or not possible because other libraries have been built with the built-in wchar_t type. This will cause obscure linker errors when using std::wstrings, and | Qt advises to build your Qt based software without wchar_t as built-in type, just like the Qt libraries themselves. In some cases this is not desired by the environment or not possible because other libraries have been built with the built-in wchar_t type. This will cause obscure linker errors when using std::wstrings, and "QString::toStdWString()":http://doc.qt.io/qt-5.0/qtcore/qstring.html#toStdWString and "QString::fromStdWString()":http://doc.qt.io/qt-5.0/qtcore/qstring.html#fromStdWString. | ||
== Possible solution == | == Possible solution == | ||
Line 11: | Line 13: | ||
Windows uses utf-16 for its character encoding, as does Qt. Using this information we can use the following code to work around the issue: | Windows uses utf-16 for its character encoding, as does Qt. Using this information we can use the following code to work around the issue: | ||
<code>/*! Convert a QString to an std::wstring | <code>/*! Convert a QString to an std::wstring */ | ||
std::wstring qToStdWString(const QString &str) | |||
{ | |||
#ifdef _MSC_VER | |||
return std::wstring((const wchar_t''')str.utf16()); | |||
#else | |||
return str.toStdWString(); | |||
#endif | |||
} | |||
/*! Convert an std::wstring to a QString | /*! Convert an std::wstring to a QString */ | ||
QString stdWToQString(const std::wstring &str) | |||
{ | |||
#ifdef _MSC_VER | |||
return QString::fromUtf16((const ushort''')str.c_str()); | |||
#else | |||
return QString::fromStdWString(str); | |||
#endif | |||
}</code> |
Revision as of 10:25, 25 February 2015
English 简体中文
QString, std::wstring and built-in wchar_t
Problem statement
Qt advises to build your Qt based software without wchar_t as built-in type, just like the Qt libraries themselves. In some cases this is not desired by the environment or not possible because other libraries have been built with the built-in wchar_t type. This will cause obscure linker errors when using std::wstrings, and "QString::toStdWString()":http://doc.qt.io/qt-5.0/qtcore/qstring.html#toStdWString and "QString::fromStdWString()":http://doc.qt.io/qt-5.0/qtcore/qstring.html#fromStdWString.
Possible solution
Windows uses utf-16 for its character encoding, as does Qt. Using this information we can use the following code to work around the issue:
/*! Convert a QString to an std::wstring */
std::wstring qToStdWString(const QString &str)
{
#ifdef _MSC_VER
return std::wstring((const wchar_t''')str.utf16());
#else
return str.toStdWString();
#endif
}
/*! Convert an std::wstring to a QString */
QString stdWToQString(const std::wstring &str)
{
#ifdef _MSC_VER
return QString::fromUtf16((const ushort''')str.c_str());
#else
return QString::fromStdWString(str);
#endif
}