我想创建一个额外的QtMsgType
。所以我编写了一个处理所有默认类型的messagehandler。 qDebug()
为QtDebugMsg
,qWarning()
为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()
,但我不确切知道如何做到这一点。有没有办法实现这一目标?提前谢谢。
答案 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";