Convert std :: string zu QString
Frage
Ich habe eine std::string content
bekam, dass ich weiß, UTF-8-Daten enthält. Ich möchte es konvertieren zu einem QString
. Wie kann ich das tun, die Vermeidung der von-ASCII-Konvertierung in Qt?
Lösung
Es gibt eine QString
Funktion namens fromUtf8
, die eine const char*
nimmt:
QString str = QString::fromUtf8(content.c_str());
Andere Tipps
QString::fromStdString(content)
ist besser, da es robuster ist. Auch beachten Sie, dass, wenn std::string
in UTF-8 kodiert ist, dann sollte es geben, genau das gleiche Ergebnis wie QString::fromUtf8(content.data(), int(content.size()))
.
In der Regel ist der beste Weg, um die Konvertierung zu tun, wird das Verfahren unter Verwendung von fromUtf8 , aber das Problem ist, wenn Sie Strings locale abhängig.
In diesen Fällen ist es vorzuziehen, fromLocal8Bit zu verwenden. Beispiel:
std::string str = "ëxample";
QString qs = QString::fromLocal8Bit(str.c_str());
Da QT5 fromStdString intern verwendet fromUtf8, so dass Sie beide verwenden können:
inline QString QString::fromStdString(const std::string& s)
{
return fromUtf8(s.data(), int(s.size()));
}