qInstallMessageHandler

查看官方文档: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 };
持续的价值描述
QtDebugMsg0qDebug () 函数生成的消息。
QtInfoMsg4qInfo () 函数生成的消息。
QtWarningMsg1qWarning () 函数生成的消息。
QtCriticalMsg2qCritical () 函数生成的消息。
QtFatalMsg3qFatal () 函数生成的消息。
QtSystemMsgQtCriticalMsg

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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_34214088

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值