Qt - “\ n”不起作用,但是std :: endl呢?

时间:2013-10-01 19:34:10

标签: c++ qt std qtcore

我有一个相当奇怪的问题,我以前从未遇到过,我不知道是什么导致它。我在Qt 4.7工作,我的项目中有很多东西打印到终端。这些打印都是通过一键按下来触发的。但是,当我按下按钮时,它们并非都打印出来。相反,所有以<< std::endl;结尾的打印语句都会打印出来,但第一个以"random text...\n";结尾的打印语句将不打印,之后的任何一个都不会出现,无论它们使用哪种样式。如果我再次点击按钮再次运行整个按钮,它将然后打印剩余的语句,然后是与上次相同的初始输出。我可以把它们全部变成std :: endl,但是它们有很多,所以我真的不愿意。我以前从未见过这样的事情,有没有人对如何解决它有任何建议?谢谢!

编辑:根据请求,这是语法(假设UI上有按钮调用mybutton)

void on_mybutton_pressed()
{
std::cout << "A" << std::endl;
std::cout << "B" << std::endl;
std::cout << "C\n";
}

按下第一次按钮后输出:

A
B

第二次按下后的输出:
C
A
B

2 个答案:

答案 0 :(得分:2)

缓冲字符输出。缓冲区在满满时刷新,但通常对于终端你不想等待; std::endl的特殊之处在于它会立即刷新缓冲区。

答案 1 :(得分:1)

如果您真的想要,可以在程序开头为cout启用单元缓冲:

std::cout << std::unitbuf;

这将在每次输出操作后刷新缓冲区。

在你的情况下,我认为这有点像黑客而不是解决方案。与刷新相关的性能损失(尽管如果不以高频率打印则无关紧要)。