c++ qt type-conversion qstring

c++ - ¿Cómo convertir QString a std:: string?



qstring to string python (9)

La forma más sencilla sería QString::toStdString() .

Estoy tratando de hacer algo como esto:

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

pero el código no compila. ¿Cómo generar el contenido de qstring en la consola (por ejemplo, para fines de depuración u otros motivos)? ¿Cómo convertir QString a std::string ?


Lo mejor sería sobrecargar el operador << a ti mismo, de modo que QString pueda pasarse como un tipo a cualquier biblioteca que espere un tipo capaz de generar resultados.

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


Puedes usar esto;

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


Puedes usar:

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

Here''s documentación de referencia para QString .


Si su objetivo final es conseguir mensajes de depuración en la consola, puede usar qDebug() .

Puedes usar como

qDebug()<<string; que imprimirá los contenidos a la consola .

Esta forma es mejor que convertirla en std::string solo por depurar los mensajes.


Una alternativa a la propuesta:

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

podría ser:

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

Consulte la documentación de qPrintable , una macro que entrega un carácter const * de QtGlobal.


Una de las cosas que debe recordar al convertir QString a std::string es el hecho de que QString está codificado en UTF-16 mientras que std::string ... Puede tener cualquier codificación.

Así que lo mejor sería:

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();

El método sugerido (aceptado) puede funcionar si especifica el códec.

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


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

Incluso podría lanzar una excepción en el compilador VS2017 en xstring

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

La forma correcta (seguro - sin excepción) es cómo se explica anteriormente desde Artyom

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();


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

Sin embargo, si estás usando Qt:

QTextStream out(stdout); out << qstr;