MessageHandler Qt

时间:2014-06-03 06:49:38

标签: c++ qt

我想创建一个额外的QtMsgType。所以我编写了一个处理所有默认类型的messagehandler。 qDebug()QtDebugMsgqWarning()QtWarningMsg等。

在Qt来源:

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

我在qInstallMsgHandler注册的messageHandler:

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(),但我不确切知道如何做到这一点。有没有办法实现这一目标?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我怀疑您可以定义QtMsgType枚举中列出的自定义消息。但是,您可以通过以特殊方式为它们添加前缀来区分消息。例如,在您的消息处理程序中,您可以编写:

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";