Solución:
Si es lo suficientemente bueno para imprimir en stderr
, puede utilizar las siguientes secuencias destinadas originalmente a la depuración:
#include<QDebug>
//qInfo is qt5.5+ only.
qInfo() << "C++ Style Info Message";
qInfo( "C Style Info Message" );
qDebug() << "C++ Style Debug Message";
qDebug( "C Style Debug Message" );
qWarning() << "C++ Style Warning Message";
qWarning( "C Style Warning Message" );
qCritical() << "C++ Style Critical Error Message";
qCritical( "C Style Critical Error Message" );
// qFatal does not have a C++ style method.
qFatal( "C Style Fatal Error Message" );
Aunque, como se señaló en los comentarios, tenga en cuenta que los mensajes qDebug se eliminan si QT_NO_DEBUG_OUTPUT
se define
Si necesita stdout, puede probar algo como esto (como ha señalado Kyle Strand):
QTextStream& qStdOut()
{
static QTextStream ts( stdout );
return ts;
}
A continuación, puede llamar de la siguiente manera:
qStdOut() << "std out!";
Encontré esto de lo más útil:
#include <QTextStream>
QTextStream out(stdout);
foreach(QString x, strings)
out << x << endl;
Escribiendo a stdout
Si quieres algo que, como std::cout
, escribe en la salida estándar de su aplicación, simplemente puede hacer lo siguiente (crédito a CapelliC):
QTextStream(stdout) << "string to print" << endl;
Si quiere evitar crear un temporal QTextStream
objeto, siga la sugerencia de Yakk en los comentarios a continuación de crear una función para devolver un static
manejar para stdout
:
inline QTextStream& qStdout()
{
static QTextStream r{stdout};
return r;
}
...
foreach(QString x, strings)
qStdout() << x << endl;
Recordar para flush
la secuencia periódicamente para garantizar que la salida se imprima realmente.
Escribiendo a stderr
Tenga en cuenta que la técnica anterior también se puede utilizar para otras salidas. Sin embargo, hay formas más legibles de escribir en stderr
(crédito a Goz y los comentarios debajo de su respuesta):
qDebug() << "Debug Message"; // CAN BE REMOVED AT COMPILE TIME!
qWarning() << "Warning Message";
qCritical() << "Critical Error Message";
qFatal("Fatal Error Message"); // WILL KILL THE PROGRAM!
qDebug()
está cerrado si QT_NO_DEBUG_OUTPUT
está activado en tiempo de compilación.
(Goz señala en un comentario que para las aplicaciones que no son de consola, estas pueden imprimirse en una secuencia diferente a la stderr
.)
NOTA: Todos los métodos de impresión Qt asumen que const char*
los argumentos son cadenas codificadas ISO-8859-1 con terminación