QT5日志定制处理

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]

发表评论

电子邮件地址不会被公开。 必填项已用*标注