Windows 10 1809更新后,Qt Creator不再在“应用程序输出”窗口中显示控制台输出

时间:2019-07-11 13:21:46

标签: qt qt-creator

我正在使用Qt 5.2.1和Qt Creator 4.5.0在调试中运行应用程序。几个月来,一切都很好,控制台输出显示在“应用程序输出”窗口中。我今天早上将1809更新应用到Windows,现在我只在输出窗口中看到异常详细信息,没有别的。

有趣的是,当我“在终端中运行”时,输出显示在命令窗口中。如果我“运行”(ctrl-R)应用程序,也会显示该信息。当我使用更高版本的Qt框架(以我的情况为5.12.1)为应用程序运行测试时,这似乎还可以。

还有其他人经历过吗?我什至不知道从哪里开始解决问题。

编辑:更多信息。我查看了Qt 5.2.1的源代码,发现如果将控制台窗口附加到进程中,则qDefaultMessageHandler不会输出消息(如您​​所期望的,例如,如果您选择“在终端中运行”选项)。如果我在应用程序的开头调用FreeConsole(),则输出将像以前一样显示在“应用程序输出”窗口中。这表明对Windows的更新已导致将控制台窗口分配给调试过程。

3 个答案:

答案 0 :(得分:1)

这可能是Qt 5.2中的一个错误,尤其是当它与更高版本的Qt一起使用时。

正确的答案是:升级到更高版本的Qt。 原因是对Qt 5.2的支持已超过3年。

您应该使用当前受支持的版本之一:5.9.8、5.12.4或5.13.0。

请注意5.9和5.12是LTS,但5.9支持将于明年结束。因此,如果您不想每6个月升级一次,那么5.12似乎是最合适的选择。

编辑

如果由于某种原因无法更新Qt的生产版本,则至少可以在系统上更新Qt Creator并更新Qt的开发版本。

假设您在编写和测试代码时在计算机上使用Qt 5.9或5.12。但是对于开发循环的任何其他部分(测试,CI,...)和生产,请保留5.2.1。

Qt在各个版本之间都具有很好的兼容性,如果您编写针对5.2进行编译的代码,则对于x> = 2的任何5.x,它都将进行编译而无需更改。

答案 1 :(得分:0)

对于感兴趣的人,我通过在程序开始时有条件地调用FreeConsole()来解决此问题,如下所示:

#ifdef Q_OS_WIN
#include <Windows.h>
#endif

...

#ifdef Q_OS_WIN
#if QT_VERSION <= QT_VERSION_CHECK(5, 2, 1)
    // Since the Windows 10 1809 update was pushed, the debug process has a
    // hidden console window allocated to it. This prevents the application output
    // reaching the console window in Qt 5.2.1 (see qlogging.cpp in the qt source for
    // reasons why). This detaches that console window, meaning the output is shown in the
    // application output window again. However, if "Run in terminal" is selected in the
    // Run options then the output will still be shown in the Application Output window.
    FreeConsole();
#endif
#endif

答案 2 :(得分:0)

解决方案非常简单:

添加

CONFIG   += console

到您的.pro文件