簡體   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