在qt中重定向,调试信息通常使用qdebug()和其他类似的语句印刷到控制台上。将该输出重定向到文件可能很有用,尤其是对于跨平台开发。这避免了使用Shell脚本并提供了更一致的解决方案。
自定义消息处理程序
重定向debug输出,QT提供了QinstallMessageHandler()函数。这使您可以安装一个自定义消息处理程序,该消息处理程序在打印消息之前对其进行处理。这是一个示例处理程序:
void myMessageOutput(qtmsgtype type,const qmessagelogcontext&context&context,const qString&msg)
{
qbyTearray localmsg = msg.tolocal8bit();
开关(类型){
case qtdebugmsg:
fprintf(stderr,“ debug:%s:%s:%u,%s)\ n”,localmsg.constdata(),context.file,context.file,context.line,context.faction.function);
休息;
案例qtinfomsg:
// ...
案例qtwarningmsg:
// ...
病例QTCriticalMSG:
// ...
case qtfatalmsg:
fprintf(stderr,“致命:%s:%s:%u,%s)\ n”,localmsg.constdata(),context.file,context.line,line,context.faction.function);
aprot();
}
}
此处理程序将消息输出到stderr,但是您可以用文件流替换stderr来重定向输出。
在您的MAIN中call qinstallMessageHandler()安装自定义处理程序,函数:
qinstallMessageHandler(myMessageOutput);
一旦安装,所有qdebug和类似的消息都将重定向到处理程序,并将其写入文件,并写入您指定的文件或流。