【发布时间】:2014-12-07 01:06:25
【问题描述】:
我一直想知道是否可以使用 Qt C++ 中的qDebug() 语句来收集用户输入。
我尝试像在标准 C++ 代码中那样做:
qDebug() >> myvar;
但它没有用。
我如何使用 Qt 从 stdin 读取信息?
【问题讨论】:
我一直想知道是否可以使用 Qt C++ 中的qDebug() 语句来收集用户输入。
我尝试像在标准 C++ 代码中那样做:
qDebug() >> myvar;
但它没有用。
我如何使用 Qt 从 stdin 读取信息?
【问题讨论】:
qDebug 用于输出到stderr。如果你想使用 Qt 从stdin 读取,你应该使用QTextStream:
#include <stdio.h>
QTextStream in(stdin);
QString line;
in >> line;
【讨论】:
不,这是不可能的。 qDebug 仅提供用于调试信息的输出流。
【讨论】:
由于您想使用 QDebug,我认为输入可能是用于调试目的。在这种情况下,如果它是一个 GUI 应用程序,您可以考虑使用QInputDialog 来启动一个模式对话框来获取输入。它有一堆静态的便利方法,但作为一个例子,你可以这样做:
qDebug() << "before debug input dialog";
QString debugText = QInputDialog::getText(NULL, "Input debug text", "Your input:");
qDebug() << "got text" << debugText;
与此的不同之处在于,只需从 stdin 读取,这不会阻塞整个事件循环(它将以通常的模式对话框方式禁用 GUI)。相比之下,从 stdin 简单读取会阻塞整个事件循环。这在调试情况下是否无关紧要,或者您是否特别想要其中一种,取决于事件循环中发生的其他事情(例如网络内容)。但是,如果您将 stdin 用于其他目的,那么这个对话框技巧会非常方便。
【讨论】:
qDebug 和朋友将文本写入适当的位置。这可以是标准错误,但也可以是系统日志。因此,并非所有qDebug 写入的位置都支持用户输入。但即使他们愿意:Qt 如何确定用户输入是否应该转到qDebug、qWarning 或其他其中之一?这是不可能的。
【讨论】: