Estoy tratando de hacer algo como esto:
QString string;
// do things...
std::cout << string << std::endl;
pero el código no se compila. ¿Cómo enviar el contenido de qstring a la consola (por ejemplo, para propósitos de depuración u otras razones)? ¿Cómo convertir QString
a std::string
?
c++
qt
type-conversion
qstring
augustin
fuente
fuente
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();
Así que su afirmación no es correctaQString 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;
. El primero es incorrecto, el segundo es perfecto. Necesita un terminal utf8 para probar esto..toStdString()
para mí siempre resulta en una infracción de acceso en el operador de canalización, independientemente de losQString
contenidos (no latin1 o no). Esto está en Qt 4.8.3 / MSVC ++ 10 / Win 7.Puedes usar:
Utiliza internamente la función QString :: toUtf8 () para crear std :: string, por lo que también es seguro para Unicode. Aquí hay documentación de referencia para
QString
.fuente
QString::toStdString()
ahora se utilizaQString::toUtf8()
para realizar la conversión, por lo que las propiedades Unicode de la cadena no se perderán ( qt-project.org/doc/qt-5.0/qtcore/qstring.html#toStdString ).QString::toStdString
, aquí está .Si su objetivo final es enviar mensajes de depuración a la consola, puede usar qDebug () .
Puedes usar como,
qDebug()<<string;
que imprimirá el contenido en la consola .De esta manera, es mejor que convertirlo
std::string
solo por depurar mensajes.fuente
Sin embargo, si estás usando Qt:
fuente
Lo mejor sería sobrecargar el operador << usted mismo, de modo que QString pueda pasarse como un tipo a cualquier biblioteca que espere un tipo capaz de salida.
fuente
Una alternativa a la propuesta:
podría ser:
Consulte la documentación de qPrintable , una macro que entrega un const char * de QtGlobal.
fuente
-no-stl
-Option. algo más de informaciónLa forma más sencilla sería
QString::toStdString()
.fuente
Puedes usar esto;
fuente
incluso podría lanzar una excepción en el compilador VS2017 en xstring
la forma correcta (segura, sin excepción) es cómo se explica arriba de Artyom
fuente
Prueba esto:
fuente