控制台输出在 Qt5 中无法正确显示

Posted

技术标签:

【中文标题】控制台输出在 Qt5 中无法正确显示【英文标题】:Console output not displaying correctly in Qt5 【发布时间】:2020-02-13 20:51:32 【问题描述】:

我正在为此学校作业编写分数课程,但无法在输入之前显示控制台消息。 cout 行应该在从控制台读取输入之前显示,但是它仅在我已经在控制台中输入输入之后才会显示。我是 Qt 的新手,所以我不熟悉它是如何工作的。

代码如下:

// one of the requrements is we have to use Qt instead of the standard iostream
int main(void) 
    QTextStream cout(stdout);
    QTextStream cin(stdin);

    Fraction f1, f2, add, sub, mul, div;
    QString line;

    cout << "Enter the numerator and denominator of fraction 1: ";
    line = cin.readLine();
    // ...

【问题讨论】:

告诉它刷新流。 谢谢,成功了!为什么我需要刷新流?两个流不是分开的吗?我想了解幕后发生的事情。 std::cinstd::cout 是并列的,但不是 stdinstdout (afaik),并且绝对不是与 QTextStream 一起使用时 【参考方案1】:

要实际显示文本,需要刷新它。根据细节,刷新可能会在写入换行符时自动完成,显然至少在应用程序写入缓冲区已满时以及文件关闭时。在您的应用程序中,这些都不会发生。所以你必须手动刷新你的cout,使用`QTextStream::flush()。

“这两个流不是彼此分开的吗?”,没错。您的两个 QTextStream 对象完全不相关,因此您从 your cin 读取无法告诉 your cout 刷新其缓冲区。相关的,请注意iostreams 以及 C stdio 的东西具有特殊机制,导致在从 stdin 读取时刷新 stdout

至于为什么QTextStream在每次&lt;&lt;操作后不刷新,那是为了让输出更有效率。刷新意味着需要进行系统调用,这很慢(与仅在应用程序内将文本从一个地方复制到另一个地方相比)。

无关,我不会将你自己的对象命名为cincout,因为这势必会与std::cinstd::cout混淆。

【讨论】:

感谢您的详尽解释。很有帮助!

以上是关于控制台输出在 Qt5 中无法正确显示的主要内容,如果未能解决你的问题,请参考以下文章

控制台输出不显示数组元素的数量。代码中无法访问的数组元素

使用 Swift Playground 无法在助手编辑器中查看控制台输出

VS2019,调试的时候控制台无法显示输出,求教各位大佬这是怎么回事?

重定向子进程标准输出

xUnit 无法输出到控制台 .NET

我想在控制台上输出二维码?