Я хотел бы создать дополнительный 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()
но я точно не знаю, как это сделать. Есть ли способ достичь этого? Заранее спасибо.
Я сомневаюсь, что вы можете определить собственное сообщение, отличное от указанного в перечислении 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";