Saltar al contenido

¿Por qué QString se imprime entre comillas?

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();
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *