MessageHandler Qt

MessageHandler Qt

本文关键字:Qt MessageHandler      更新时间:2023-10-16

我想创建一个额外的QtMsgType。因此,我编写了一个处理所有默认类型的messagehandler。qDebug()QtDebugMsg, qWarning()QtWarningMsg

在Qt源码中:

enum QtMsgType { QtDebugMsg, QtWarningMsg, QtCriticalMsg, QtFatalMsg, QtSystemMsg = QtCriticalMsg };

我的messageHandler注册在qInstallMsgHandler:

void messageHandler(QtMsgType type, const QMessageLogContext&, const QString& msg) {
    switch (type){
    case QtDebugMsg:    OutputMessageHandler::getHandler()->debug(msg);   break;
    case QtWarningMsg:  OutputMessageHandler::getHandler()->warning(msg); break;
    case QtCriticalMsg: OutputMessageHandler::getHandler()->error(msg);   break;
    case QtFatalMsg:    OutputMessageHandler::getHandler()->fatal(msg);   break;
    }
}

我想有一个qMyCustomMessage()MyCustomMsg,这样我的处理程序就能像捕获qDebug()一样捕获它,但我不知道我该怎么做。有什么办法可以做到这一点吗?

我怀疑您可以定义QtMsgType enum中列出的其他自定义消息。但是,您可以通过使用特殊的前缀来区分消息。例如,在您的消息处理程序中,您可以这样写:

void messageHandler(QtMsgType type, const char *msg)
 {
     switch (type) {
     case QtDebugMsg:
         QString strMessage(msg);
         if (strMessage.startsWith("MyCustomMessage") {
             // Handle my messages here.
         }
         break;
     default:
         break;
     }
 }

在你的代码中,你可以发送这样的消息:

qDebug() << "MyCustomMessage" << "This is a special message I send";