将std :: string转换为QString


Answers:


90

有一个QString调用的函数fromUtf8,需要一个const char*

QString str = QString::fromUtf8(content.c_str());

19
效率更高:QString::fromUtf8( content.data(), content.size() )
Marc Mutz-mmutz 2011年

2
在C ++标准中,不能保证std::string使用UTF8编码(实际上未指定编码),因此此答案并不完全正确。至少您应该通过断言检查编码。
–plasmcel

101

QString::fromStdString(content)更好,因为它更强大。另请注意,如果std::string是以UTF-8编码,则其结果应与完全相同QString::fromUtf8(content.data(), int(content.size()))


4
仅在Qt5中。在Qt4中,它使用QString :: fromAscii。
雷米·班诺特

3
这应该是公认的答案。但是,您的最后声明不一定正确。在C ++标准中,不能保证std::string使用UTF8编码(实际上是未指定编码),因此QString::fromUtf8(content.data(), int(content.size()))可能会给出与()不一样的结果(并且也是不正确的)QString::fromStdString(content)
–plasmcel

7

通常,进行转换的最佳方法是使用fromUtf8方法,但是问题是当您具有依赖于语言环境的字符串时。

在这些情况下,最好使用fromLocal8Bit。例:

std::string str = "ëxample";
QString qs = QString::fromLocal8Bit(str.c_str());

5

由于Qt5 fromStdString在内部使用fromUtf8,因此您可以同时使用以下两者:

inline QString QString::fromStdString(const std::string& s) 
{
return fromUtf8(s.data(), int(s.size()));
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.