Ich versuche so etwas zu tun:
QString string;
// do things...
std::cout << string << std::endl;
Der Code wird jedoch nicht kompiliert. Wie kann der Inhalt von qstring in die Konsole ausgegeben werden (z. B. zu Debugging-Zwecken oder aus anderen Gründen)? Wie konvertiere ich QString
zu std::string
?
c++
qt
type-conversion
qstring
Augustin
quelle
quelle
static inline std::string toUtf8(const QString& s) { QByteArray sUtf8 = s.toUtf8(); return std::string(sUtf8.constData(), sUtf8.size()); }
std::string utf8_text = qs.toUtf8().constData();
Also ist Ihre Aussage nicht korrektQString s = QString::fromUtf8("árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP"); std::cout << s.toStdString() << std::endl; std::cout << s.toUtf8().constData() << std::endl;
. Der erste ist falsch, der zweite ist perfekt. Sie benötigen ein utf8-Terminal, um dies zu testen..toStdString()
für mich immer zu einer Zugriffsverletzung beim Pipe-Betreiber, unabhängig vomQString
Inhalt des (nicht-lateinischen1 oder nicht). Dies ist auf Qt 4.8.3 / MSVC ++ 10 / Win 7.Sie können verwenden:
Es verwendet intern die Funktion QString :: toUtf8 (), um std :: string zu erstellen, sodass es auch Unicode-sicher ist. Hier ist die Referenzdokumentation für
QString
.quelle
QString::toStdString()
jetztQString::toUtf8()
die Konvertierung durchgeführt, damit die Unicode-Eigenschaften der Zeichenfolge nicht verloren gehen ( qt-project.org/doc/qt-5.0/qtcore/qstring.html#toStdString ).QString::toStdString
, finden Sie ihn hier .Wenn Ihr letztendliches Ziel darin besteht, Debugging-Nachrichten an die Konsole zu senden, können Sie qDebug () verwenden .
Sie können wie verwenden,
qDebug()<<string;
Dadurch wird der Inhalt auf der Konsole gedruckt .Dieser Weg ist besser, als ihn
std::string
nur zum Debuggen von Nachrichten zu konvertieren .quelle
Wenn Sie jedoch Qt verwenden:
quelle
Am besten überladen Sie den Operator << selbst, damit QString als Typ an jede Bibliothek übergeben werden kann, die einen ausgabefähigen Typ erwartet.
quelle
Eine Alternative zum vorgeschlagenen:
könnte sein:
Siehe qPrintable-Dokumentation , ein Makro, das ein const char * von QtGlobal liefert.
quelle
-no-stl
-Option-Set. einige weitere InformationenDer einfachste Weg wäre
QString::toStdString()
.quelle
Sie können dies verwenden;
quelle
könnte sogar eine Ausnahme auf dem VS2017-Compiler in xstring auslösen
Der richtige Weg (sicher - keine Ausnahme) ist, wie oben von Artyom erklärt
quelle
Versuche dies:
quelle