繁体   English   中英

使用 QTextStream 停止 std::cout 工作

[英]Using QTextStream stops std::cout working

在安装了Qt VS Tools扩展的 Visual Studio 2019 中使用 Qt (v5.15.0)。 简单的控制台应用程序。 下面是问题的简单演示:

#include <iostream>
#include <QDebug>

void main()
{
    std::cout << "cout: Line 1\n";
    qDebug() << "qDebug: Line 2";
    std::cout << "cout: Line 3\n";
    QTextStream qts{stdout};
    qts << "QTextStream: Line 4\n";
    qts << "QTextStream: Line 5\n";
    qts.flush();
    qDebug() << "qDebug: Line 6";
    std::cout << "cout: Line 7\n";       // Not printed!
    qDebug() << "qDebug: Line 8";
}

Line 7外,所有内容均已打印。 注释掉QTextStream的四行,然后再次打印Line 7行。

这似乎与“捕获”标准 output 的QTextStream object 有关。 如何让 object 释放stdout以便std::cout再次开始工作?

在我的电脑(visual studio community edition 2019 和 QT 5.9.9)上,它编译并打印包括第 7 行在内的每一行。如果要确保在第 7 行刷新缓冲区,可以使用:

std::cout << "cout: Line 7\n" << std::endl;

但是您必须在要确定要刷新的每一行中都使用它。 或者,如果您希望每次调用std::cout时都刷新缓冲区,则可以使用unitbuf

std::cout << std::unitbuf

设置 unitbuf 标志后,每次插入操作后都会刷新关联的缓冲区。 在您的系统上,这 4 行QTextStream具有默认情况下不刷新第 7 行的副作用。 在我的系统上,这些行没有这种副作用。 因为第 7 行从一开始就不能保证被刷新,所以这真的不是问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM