我正在使用Qt 5.2.1和Qt Creator 4.5.0在调试中运行应用程序。几个月来,一切都很好,控制台输出显示在“应用程序输出”窗口中。我今天早上将1809更新应用到Windows,现在我只在输出窗口中看到异常详细信息,没有别的。
有趣的是,当我“在终端中运行”时,输出显示在命令窗口中。如果我“运行”(ctrl-R)应用程序,也会显示该信息。当我使用更高版本的Qt框架(以我的情况为5.12.1)为应用程序运行测试时,这似乎还可以。
还有其他人经历过吗?我什至不知道从哪里开始解决问题。
编辑:更多信息。我查看了Qt 5.2.1的源代码,发现如果将控制台窗口附加到进程中,则qDefaultMessageHandler不会输出消息(如您所期望的,例如,如果您选择“在终端中运行”选项)。如果我在应用程序的开头调用FreeConsole(),则输出将像以前一样显示在“应用程序输出”窗口中。这表明对Windows的更新已导致将控制台窗口分配给调试过程。
答案 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文件