在Qt中:我可以输出到“stdout”吗,就像使用qDebug()输出到“stderr”一样简单

In Qt: Can I output to `stdout`, as easy as I can output to `stderr` using qDebug()?

本文关键字:输出 简单 qDebug 一样 stderr Qt 我可以 stdout      更新时间:2023-10-16

到目前为止,我使用 qDebug().noquote() 输出所有内容。这很容易,因为它只需要一个简单的#import <QDebug>

现在我需要输出所有内容stdout,但我不知道如何轻松做到这一点。我是这样被教导的:

QTextStream cout(stdout, QIODevice::WriteOnly);

但是,创建新对象比简单的#import <QDebug>要麻烦一些。在qt中处理stdout的好/最不麻烦的方法是什么?

qDebug()qInfo()等都通过管道传输到默认消息处理程序。但是,您可以轻松安装自己的调试字符串,将调试字符串写入不同的流,文件或任何内容。您需要做的就是定义一个消息处理程序函数并使用 qInstallMessageHandler(( 安装它。

上所述,这里有一个完整的示例:

#include <QDebug>
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    QTextStream cout(stdout, QIODevice::WriteOnly);
    cout << msg << endl;
}
int main(int argc, char *argv[])
{
    qInstallMessageHandler(myMessageOutput);
    qDebug().noquote() << "Hello world!";
}

最好的方法是你提到的那个。您不必创建新的局部变量:

QTextStream(stdout) << "Hello world!" << Qt::endl;

如果源文本不是 Latin-1 编码的,则需要在将其传递给流运算符之前转换为 QString

QTextStream(stdout) << QString::fromUtf8("utf8 literal") << Qt::endl;