MessageHandler Qt

0

Я хотел бы создать дополнительный QtMsgType. Поэтому я написал обработчик сообщений, который обрабатывает все типы по умолчанию. qDebug() для QtDebugMsg, qWarning() для QtWarningMsg и т.д.

В источнике Qt:

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

Мое сообщениеHandler, зарегистрированное в 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() но я точно не знаю, как это сделать. Есть ли способ достичь этого? Заранее спасибо.

Теги:
qt

1 ответ

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";
  • 0
    Спасибо за ответ. У меня была та же идея, но она включает в себя разбор строк, которых я хочу избежать. Но я боюсь, что вы правы, когда говорите, что лучшего решения нет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню