gpt4 book ai didi

c++ - 使用QTextStream停止std::cout工作

转载 作者:行者123 更新时间:2023-12-02 10:13:29 24 4
gpt4 key购买 nike

在安装了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
这似乎与 QTextStream对象“捕获”标准输出有关。如何获得释放 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行,所以这确实不是问题。

关于c++ - 使用QTextStream停止std::cout工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62714546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com