ChatGPT解决这个技术问题 Extra ChatGPT

Convert std::string to QString

I've got an std::string content that I know contains UTF-8 data. I want to convert it to a QString. How do I do that, avoiding the from-ASCII conversion in Qt?


p
plasmacel

QString::fromStdString(content) is better since it is more robust. Also note, that if std::string is encoded in UTF-8, then it should give exactly the same result as QString::fromUtf8(content.data(), int(content.size())).


Only in Qt5. In Qt4 it uses QString::fromAscii.
This should be the accepted answer. However your last statement is not necessarily true. In the C++ standard there is no guarantee, that std::string is encoded in UTF8 (actually the encoding is unspecified), so QString::fromUtf8(content.data(), int(content.size())) may give different (and also incorrect) results than QString::fromStdString(content).
l
leyyin

There's a QString function called fromUtf8 that takes a const char*:

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

More efficient: QString::fromUtf8( content.data(), content.size() )
In the C++ standard there is no guarantee, that std::string is encoded in UTF8 (actually the encoding is unspecified), so this answer is not entirely correct. At least you should check the encoding by an assertion.
m
maxa

Since Qt5 fromStdString internally uses fromUtf8, so you can use both:

inline QString QString::fromStdString(const std::string& s) 
{
return fromUtf8(s.data(), int(s.size()));
}

T
Tarod

Usually, the best way of doing the conversion is using the method fromUtf8, but the problem is when you have strings locale-dependent.

In these cases, it's preferable to use fromLocal8Bit. Example:

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