我在窗口中的eclipse中使用qDebug(),它不给我任何输出,似乎Qt从Qt的文档发送到debugging器。
The Qt implementation of these functions prints the text to the stderr output under Unix/X11 and Mac OS X. With Windows,if it is a console application,the text is sent to console; otherwise,it is sent to the debugger.
我的目的不是如何在eclipse中打印消息。
我的目的是要知道,为什么Qt不会select发送debugging消息到Windows中的std错误stream,而实际上它将debugging消息发送到Mac Os中的std错误stream。
Windows和Mac Os有什么区别吗?
replaceXKeycodetoKeysym
只清除控制台输出的一部分
Linux C:交互式输出
感谢帮助。
如何检索USB设备接口GUID?
将GetVersionEx数字转换为操作系统名称
如何在.NET中执行应用程序内通信
读控制台缓冲区/输出C ++
从dll返回多个string
由于问题实际上是“为什么”而不是“如何”,原因是双重的:
在Windows下的GUI程序通常没有一个控制台,他们必须自己打开它(当然特别是发行版本当然不会,这会惹恼用户)。 它们不会继承启动它们的进程的控制台。 Qt GUI程序要像在Windows下的任何其他GUI程序一样运行,除非您另外明确指定(例如为qmake添加CONfig+=console )。
Windows中的调试输出通常使用Windows的调试输出功能( DebugView工具的下载页面中的一些实用信息),例如可能每个Windows IDE都支持它。 Qt只是遵循这个软件开发的平台惯例。
总之,这就是默认和惯例下在Windows下完成的过程。 如果 Qt做了一些不同的事情, 那么有必要有充分的理由。
在Unix(和Linux)下,默认行为是不同的,除非采取额外措施,否则子进程会继承stdin,stdout和stderr到父进程的TTY。 通常程序本身并没有采取任何特殊措施,这取决于父级(例如,从shell /脚本启动程序时,通过添加2>/dev/null )。
注意:我没有时间检查Windows下的Qt应用程序的调试版本是否有点不同,默认情况下输出到控制台,所以在上面的阅读时要考虑到这一点。
您必须要求Qt开发人员确定,但是我的猜测是他们是这样做的,因为在Windows下,当GUI程序运行时,stdout和stderr通常不可见。
在Windows下,如果你想查看GUI应用程序的stdout和/或stderr流,你必须添加一些明确的代码来打开一个控制台窗口并将流重定向到它:
AllocConsole(); freopen(conOutStr,"w",stdout); freopen(conOutStr,stderr);
Qt开发人员可能认为大多数Windows程序员不会这样做,而是希望在他们的IDE /调试器窗口中看到他们的qDebug()输出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。