Próbuję zrobić coś takiego:
QString string;
// do things...
std::cout << string << std::endl;
ale kod się nie kompiluje. Jak wyprowadzić zawartość qstring do konsoli (np. W celu debugowania lub z innych powodów)? Jak przekonwertować QString
na std::string
?
c++
qt
type-conversion
qstring
sierpień
źródło
źródło
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();
więc twoje stwierdzenie jest niepoprawneQString 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;
. Pierwszy jest niepoprawny, drugi jest idealny. Aby to sprawdzić, potrzebujesz terminalu utf8..toStdString()
dla mnie zawsze skutkuje naruszeniem dostępu w operatorze potoku, niezależnie odQString
zawartości (innej niż łacińska1). To jest na Qt 4.8.3 / MSVC ++ 10 / Win 7.Możesz użyć:
Wewnętrznie używa funkcji QString :: toUtf8 () do tworzenia std :: string, więc jest również bezpieczny dla Unicode. Oto dokumentacja referencyjna dla
QString
.źródło
QString::toStdString()
teraz używaQString::toUtf8()
do konwersji, więc właściwości ciągu znaków Unicode nie zostaną utracone ( qt-project.org/doc/qt-5.0/qtcore/qstring.html#toStdString ).QString::toStdString
, oto on .Jeśli Twoim ostatecznym celem jest dostarczenie komunikatów debugujących do konsoli, możesz użyć qDebug () .
Możesz użyć jak
qDebug()<<string;
który wydrukuje zawartość do konsoli .Ten sposób jest lepszy niż konwersja w
std::string
celu debugowania wiadomości.źródło
Jeśli jednak używasz Qt:
źródło
Najlepiej byłoby samemu przeciążyć operatora <<, aby QString można było przekazać jako typ do dowolnej biblioteki oczekującej typu zdolnego do wyjścia.
źródło
Alternatywa dla proponowanego:
możliwe:
Zobacz dokumentację qPrintable , makro dostarczające const char * z QtGlobal.
źródło
-no-stl
zestawem Qt-Build z zestawem -Option. więcej informacjiNajprostszy sposób byłby
QString::toStdString()
.źródło
Możesz tego użyć;
źródło
może nawet zgłosić wyjątek na kompilatorze VS2017 w xstring
właściwą drogą (bezpieczna - bez wyjątku) jest to, co wyjaśniono powyżej od Artema
źródło
Spróbuj tego:
źródło