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.
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;