查看官方文档:https://doc.qt.io/qt-5/qtglobal.html#qInstallMessageHandler
函数原型:QtMessageHandler qInstallMessageHandler(QtMessageHandler handler)
函数功能:安装之前定义的 Qt 消息处理程序。返回指向前一个消息处理程序的指针。
消息处理程序是一个打印调试消息、警告、严重和致命错误消息的函数。Qt 库(调试模式)包含数百条在发生内部错误(通常是无效的函数参数)时打印的警告消息。除非在编译期间设置了 QT_NO_WARNING_OUTPUT 和/或 QT_NO_DEBUG_OUTPUT ,否则 Qt 内置发布模式也包含此类警告。如果您实现自己的消息处理程序,您可以完全控制这些消息。
默认消息处理程序将消息打印到 X11 下的标准输出或 Windows 下的调试器。如果是致命消息,应用程序将立即中止。
只能定义一个消息处理程序,因为这通常在应用程序范围内完成以控制调试输出。
要恢复消息处理程序,请调用qInstallMessageHandler(0)
。
QtMessageHandler:这是指向具有以下签名的函数的指针的 typedef:
typedef void (*QtMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &);
QtMsgType:是一个枚举类型,这个枚举描述了可以发送到消息处理程序(QtMessageHandler)的消息。您可以使用枚举来识别各种消息类型并将其与适当的操作相关联。
enum QtMsgType { QtDebugMsg, QtWarningMsg, QtCriticalMsg, QtFatalMsg, QtInfoMsg, QtSystemMsg = QtCriticalMsg };
持续的 | 价值 | 描述 |
---|---|---|
QtDebugMsg | 0 | 由qDebug () 函数生成的消息。 |
QtInfoMsg | 4 | 由qInfo () 函数生成的消息。 |
QtWarningMsg | 1 | 由qWarning () 函数生成的消息。 |
QtCriticalMsg | 2 | 由qCritical () 函数生成的消息。 |
QtFatalMsg | 3 | 由qFatal () 函数生成的消息。 |
QtSystemMsg | QtCriticalMsg |
qInstallMessageHandler使用举例:
#include <qapplication.h>
#include <stdio.h>
#include <stdlib.h>
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray localMsg = msg.toLocal8Bit();
const char *file = context.file ? context.file : "";
const char *function = context.function ? context.function : "";
switch (type) {
case QtDebugMsg:
fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtInfoMsg:
fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtWarningMsg:
fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtCriticalMsg:
fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtFatalMsg:
fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
}
}
int main(int argc, char **argv)
{
qInstallMessageHandler(myMessageOutput);
QApplication app(argc, argv);
...
return app.exec();
}