1. QT5日志回调函数
QT5中,可以使用日志回调函数定制日志的输出。
[source language=”cpp”]
QtMessageHandler qInstallMessageHandler(QtMessageHandler handler)
[/source]
返回值为系统原注册的消息回调函数,可以使用 qInstallMessageHandler(0) 恢复原有的消息处理句柄函数。QtMessageHandler原型为:
[source language=”cpp”]
typedef void (*QtMessageHandler)(QtMsgType, const QMessageLogContext &,
const QString &);
[/source]
QT5默认额消息处理句柄消息输出到X11窗口或者调试器窗口,如果消息类型为fatal,程序会退出。
2. QT5日志回调函数样例
[cpp toolbar=”on”]
#include <qapplication.h>
#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);
QApplication app(argc, argv);
// …
return app.exec();
}
[/cpp]