Tienes que instalar un controlador de mensajes usando qInstallMsgHandler
función, y luego, se puede utilizar para escribir el QTextStream
depuración mensaje en un archivo. Este es un ejemplo de muestra:
#include <QtGlobal>
#include <stdio.h>
#include <stdlib.h>
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray localMsg = msg.toLocal8Bit();
switch (type) {
case QtDebugMsg:
fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtInfoMsg:
fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtWarningMsg:
fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtCriticalMsg:
fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtFatalMsg:
fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
abort();
}
}
int main(int argc, char **argv)
{
qInstallMessageHandler(myMessageOutput); // Install the handler
QApplication app(argc, argv);
...
return app.exec();
}
Tomado del doc de qInstallMsgHandler
(I solo añadió los comentarios):
En el ejemplo anterior, la función myMessageOutput
utiliza stderr
lo cual es posible que desee reemplazar con alguna otra secuencia de archivos, ¡o reescribir completamente la función!
Una vez que escribir e instalar esta función, toda su qDebug
(así como qWarning
, qCritical
etc) los mensajes serán redireccionados al archivo que está escribiendo en el controlador.
Hola, muchas gracias. No solo me permitirá redirigir la salida de depuración a un archivo, también me permite imprimir más información útil, como una marca de tiempo :) – Septagram
@Septagram: Exactamente. Puede agregar algunos mensajes útiles en el propio hanlder; e incluso puede enviar diferentes mensajes a diferentes archivos, en función de lo que use 'qDebug',' qWarning', 'qCritical' ¡y así sucesivamente! – Nawaz
Por cierto, la devolución de llamada que hace la salida real - void myMessageOutput (tipo QtMsgType, const char * msg) - ¿en qué codificación recibe un mensaje? – Septagram