vs qt 调试 输出 打印 到输出窗口 或控制台窗口

printf只能输出 到控制台窗口

一、qt 

Qt日志重定向(将qDebug信息输出到界面控件)_wx61a586bb4cf91的技术博客_51CTO博客

Windows版qt中,如果是一个控制台应用程序,文本将被发送到控制台;否则,被发送到调试器。

也就是qt中,对于非Qt console Application工程,默认的qDebug()会输出到qt creator 的应用程序输出窗口

在这种情况下,printf()、fprintf(stdout...)、fpritnf(stderr...) 标准输出都无法显示。只有开启控制台窗口以及设置输出到控制台窗口才能将标准输出显示出来。下面两个步骤是设置输出到控制台(DOS)窗口以及开启控制台窗口。

1、在.pro 文件中添加 CONFIG += console, qt 日志输出将显示到控制台(DOS)窗口,qDebug()输出的信息将输出到控制台(DOS)窗口,传统的pring()、fprintf(stdout...)、fprinf(stderr,..)默认显示到控制台(DOS)窗口

等价于 在 项目配置中 ,qmake 额外参数项中加入 "CONFIG+=console"
vs qt 调试 输出 打印 到输出窗口 或控制台窗口_第1张图片

2、勾选run in terminal ,显示控制台窗口,不勾选的话,将无法显示控制台(DOS)窗口vs qt 调试 输出 打印 到输出窗口 或控制台窗口_第2张图片

可能存在设置完之后控制台窗口无法显示的情况,需要选中工程,右键选择 清理、构建。

关于脚本文件的日志输入和输出

脚本文件(*.pro,*.prl,*.pri,*.conf,*.prf)是由qmake进行解释的,可以通过message()/warning()/error()等函数输出到qt creator的概要信息窗口。脚本有提供一个promt的输入函数,但是需要在dos窗口中通过命令行运行qmake才能进行输入。
参考 prompt(question, [decorate])

关于qt 中的qDebug()

qDebug()在windows中是调用windows api OutputDebugString()函数。
qDebug就是一个宏定义,最终都指向QMessageLogger的debug函数:

#define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug

debug函数有多种重载,有的会直接运行出结果;有的会构建并返回QDebug对象,QDebug类重载了流操作符,使得qDebug可以使用流操作符  qDebug()<<"This is a debug message.";  。但最终都会调用下面的函数。

static void qt_message_print(QtMsgType, const QMessageLogContext &context, const QString &message);

二、visual studio

1、vs 中有一个OutputDebugString (Windows.h中)函数,在所有窗体程序中都可以输出到vs的输出窗口,在调试窗体程序,无控制台窗口时,想打印参数,那么这个函数就很有用了。
vs qt 调试 输出 打印 到输出窗口 或控制台窗口_第3张图片

2、MFC中,有TRACE() 将信息输入到控制台窗口中和输出窗口中。


在CONSOLE程序(windows默认)或者WINDOWS程序中,输入到输出窗口需要调用OutputDebugString(argv[i]);  并包含Windows.h的头文件,但是该函数不会输出到控制台窗口。、设置vs中窗体程序不显示控制台窗口,需要将子系统改为:窗口 (/SUBSYSTEM:WINDOWS)。并 根据情况设置main函数名称及其 参数。
vs qt 调试 输出 打印 到输出窗口 或控制台窗口_第4张图片

如果想让程序不显示任何窗口,选用console子系统,并在程序开始加上这句话:(参考:VS2010隐藏控制台程序的黑框_缎锦小妹的博客-CSDN博客)
“#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )”

你可能感兴趣的:(qt,mfc,vs,调试,输出,控制台窗口,输出窗口,打印日志)