如何修复windows上的Qt控制台输出(使用“qInstallMsgHandler”和“qDebug”)

How do you fix Qt console output on windows (using `qInstallMsgHandler` and `qDebug`)?

本文关键字:qInstallMsgHandler qDebug 使用 windows 何修复 上的 Qt 输出 控制台      更新时间:2023-10-16

背景:

我使用的是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应用程序],则[您的消息]将发送到调试器。这如果在汇编

(注意:我添加了重点。方括号中的文本是我自己的。(

相关文章:
  • 没有找到相关文章