Ich versuche, so etwas zu tun:Wie konvertiert man QString in std :: string?
QString string;
// do things...
std::cout << string << std::endl;
aber der Code nicht kompiliert. Wie wird der Inhalt von qstring in die Konsole ausgegeben (z. B. für Debugging-Zwecke oder aus anderen Gründen)? Wie rechnet man QString
in std::string
um?
Dies ist nicht sicher und ist etwas langsamer als der richtige Weg. Sie greifen auf die Daten eines QByteArray zu, das auf dem Stapel erstellt wurde. Der Destruktor für das QByteArray kann vor dem Konstruktor der STL-Zeichenfolge aufgerufen werden. Der sicherste Weg, eine Hilfsfunktion zu erstellen. 'statisch inline std :: string toUtf8 (const QString & s) { \t QByteArray sUtf8 = s.toUtf8(); \t Rückgabe std :: string (sUtf8.constData(), sUtf8.size()); } ' – Vitali
@Vitali nicht korrekt. "Der Destruktor für das QByteArray kann vor dem Konstruktor des STL-Strings aufgerufen werden" ist nicht korrekt Aussage: Den Standard zitieren: 12.2.3 Temporäre Objekte werden als letzter Schritt bei der Auswertung des Volltextes (1.9) zerstört, der (lexikalisch) enthält den Punkt, an dem sie erstellt wurden. Und der volle Ausdruck dort ist 'std :: string utf8_text = qs.toUtf8(). ConstData();' Deine Aussage ist also nicht korrekt – Artyom
Das stimmt - ich dachte über const char * x = qs.ToUtf8(). ConstData(). Ist es nicht einfacher, einfach qs.toStdString() aufzurufen? – Vitali