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
?
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.
Sie können verwenden:
QString qs;
// do things
std::cout << qs.toStdString() << std::endl;
Hier ist Referenzdokumentation für QString
.
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.
QString qstr;
std::string str = qstr.toStdString();
Wenn Sie jedoch Qt verwenden:
QTextStream out(stdout);
out << qstr;
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();
}
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.
Der einfachste Weg wäre QString::toStdString()
.
Sie können dies verwenden.
QString data;
data.toStdString().c_str();
QString data;
data.toStdString().c_str();
~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();
Versuche dies:
#include <QDebug>
QString string;
// do things...
qDebug() << "right" << string << std::endl;