[英]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.