如何修复windows上的Qt控制台输出(使用“qInstallMsgHandler”和“qDebug”)
How do you fix Qt console output on windows (using `qInstallMsgHandler` and `qDebug`)?
背景:
我使用的是Qt的qInstallMsgHandler()
和qDebug()
,这是一个GUI应用程序。
我的消息处理程序与Qt的qtglobal::qInstallMsgHandler()
文档中给出的示例消息处理程序相同。
Linux与Windows:
在Linux上,每次调用qDebug()
时,都会立即向控制台显示消息。。。这是好的,也是意料之中的。
在Windows上,每次调用qDebug()
时,控制台上都不会显示消息。相反,控制台中没有显示任何内容。然后,当应用程序关闭时,所有消息都会突然显示在控制台中。
问题:
如何修复windows上的Qt控制台输出(使用qInstallMsgHandler()
和qDebug()
(
在Windows上,消息处理程序需要在fprintf()
之后执行fflush(stderr)
不知道你为什么需要这个额外的fflush()
,但它有效。
长话短说:
我碰巧注意到,在调用qInstallMsgHandler((之前,每次调用qDebug((之后都会立即出现qDebug(消息。
凭直觉,我决定研究qDebug((函数。我碰巧在Windows上从源代码构建了Qt,所以我进入了qDebug((源代码,发现如果没有消息处理程序,那么他们就有一个默认的消息处理程序短代码片段。以下是这个片段的本质:
if (handler) {
(*handler)(msgType, buf);
} else {
fprintf(stderr, "%sn", buf);
fflush(stderr);
}
我将fflush(stderr)
添加到我的消息处理程序中,现在qDebug((消息出现时确实会出现。
Qt文档中关于qDebug((的注意事项:
在Windows下,如果[您的应用程序]是控制台应用程序;否则[如果您的应用程序是GUI应用程序],则[您的消息]将发送到调试器。这如果在汇编
(注意:我添加了重点。方括号中的文本是我自己的。(
- 没有找到相关文章