web-dev-qa-db-de.com

Wie konvertiere ich QString in std :: string?

Ich versuche so etwas zu tun:

QString string;
// do things...
std::cout << string << std::endl;

der Code wird jedoch nicht kompiliert. Wie wird der Inhalt von qstring in der Konsole ausgegeben (z. B. zu Debugging-Zwecken oder aus anderen Gründen)? Wie konvertiere ich QString in std::string?

202
augustin

Wenn Sie QString in std::string konvertieren, sollten Sie daran denken, dass QString UTF-16-kodiert ist, während std::string... möglicherweise Kodierungen enthält.

Das Beste wäre also:

QString qs;

// Either this if you use UTF-8 anywhere
std::string utf8_text = qs.toUtf8().constData();

// or this if you're on Windows :-)
std::string current_locale_text = qs.toLocal8Bit().constData();

Die vorgeschlagene (akzeptierte) Methode funktioniert möglicherweise, wenn Sie den Codec angeben.

Siehe: http://doc.qt.io/qt-5/qstring.html#toLatin1

197
Artyom

Sie können verwenden:

QString qs;
// do things
std::cout << qs.toStdString() << std::endl;

Hier ist Referenzdokumentation für QString.

237

Wenn Sie das Debugging von Meldungen an die Konsole senden möchten, können Sie qDebug () verwenden.

Sie können wie verwenden,

qDebug()<<string;, das den Inhalt an die console druckt.

Dieser Weg ist besser als die Konvertierung in std::string, nur um Nachrichten zu debuggen.

33
liaK
QString qstr;
std::string str = qstr.toStdString();

Wenn Sie jedoch Qt verwenden:

QTextStream out(stdout);
out << qstr;
23
chris

Am besten wäre es, den Operator << selbst zu überladen, sodass QString als Typ an jede Bibliothek übergeben werden kann, die einen ausgabefähigen Typ erwartet.

std::ostream& operator<<(std::ostream& str, const QString& string) {
    return str << string.toStdString();
}
17
Puppy

Eine Alternative zu den vorgeschlagenen:

QString qs;
std::string current_locale_text = qs.toLocal8Bit().constData();

könnte sein:

QString qs;
std::string current_locale_text = qPrintable(qs);

Siehe qPrintable documentation , ein Makro, das ein const char * von QtGlobal liefert.

10
flokk

Der einfachste Weg wäre QString::toStdString().

7
shaveenk

Sie können dies verwenden.

QString data;
data.toStdString().c_str();
 QString data;
   data.toStdString().c_str();

könnte sogar eine Ausnahme für den VS2017-Compiler in xstring auslösen

 ~basic_string() _NOEXCEPT
        {   // destroy the string
        _Tidy_deallocate();
        }

der richtige Weg (sicher - keine Ausnahme) ist, wie oben von Artyom erklärt

 QString qs;

    // Either this if you use UTF-8 anywhere
    std::string utf8_text = qs.toUtf8().constData();

    // or this if you're on Windows :-)
    std::string current_locale_text = qs.toLocal8Bit().constData();
0
JPM

Versuche dies:

#include <QDebug>
QString string;
// do things...
qDebug() << "right" << string << std::endl;
0
wudongliang