Solución:
Qt 5.4 tiene una nueva característica que le permite desactivar esto. Para citar la documentación:
QDebug y QDebug :: noquote ()
Desactiva la inserción automática de caracteres de comillas alrededor del contenido de QChar, QString y QByteArray y devuelve una referencia a la secuencia.
Esta función se introdujo en Qt 5.4.
Consulte también quote () y maybeQuote ().
(El énfasis es mío.)
A continuación, se muestra un ejemplo de cómo utilizaría esta función:
QDebug debug = qDebug();
debug << QString("This string is quoted") << endl;
debug.noquote();
debug << QString("This string is not") << endl;
Otra opción es usar QTextStream
con stdout
. Hay un ejemplo de esto en la documentación:
QTextStream out(stdout);
out << "Qt rocks!" << endl;
¿Por qué?
Es por la implementación de qDebug()
.
Del código fuente:
inline QDebug &operator<<(QChar t) { stream->ts << ''' << t << '''; return maybeSpace(); }
inline QDebug &operator<<(const char* t) { stream->ts << QString::fromAscii
inline QDebug &operator<<(const QString & t) { stream->ts << '"' << t << '"'; return maybeSpace(); }
Por lo tanto,
QChar a="H";
char b = 'H';
QString c = "Hello";
qDebug()<<a;
qDebug()<<b;
qDebug()<<c;
salidas
'H'
H
"Hello"
Comentario
Entonces, ¿por qué hacer esto? Ya que qDebug
tiene el propósito de depurar, las entradas de varios tipos de tipo se convertirán en salida de flujo de texto a través de qDebug
.
Por ejemplo, qDebug
imprimir valor booleano en expresión de texto true
/ false
:
inline QDebug &operator<<(bool t) { stream->ts << (t ? "true" : "false"); return maybeSpace(); }
Se produce true
o false
a su terminal. Por lo tanto, si tuvieras un QString
cual tienda true
, necesitas una comilla "
para especificar el tipo.
Qt 4: si la cadena contiene solo ASCII, la siguiente solución alternativa ayuda:
qDebug() << QString("TEST").toLatin1().data();