ToStdWStringAndBuiltInWchar: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
(Add "cleanup" tag)
(Convert ExpressionEngine links)
Line 9: Line 9:
== 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 "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.
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 [http://doc.qt.io/qt-5.0/qtcore/qstring.html#toStdWString QString::toStdWString()] and [http://doc.qt.io/qt-5.0/qtcore/qstring.html#fromStdWString QString::fromStdWString()].


== Possible solution ==
== Possible solution ==

Revision as of 15:47, 4 March 2015

This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

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() and QString::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
}