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

3zwjbxry  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(256)

到目前为止,我使用qDebug().noquote()输出所有内容,这很容易,因为它只需要一个简单的#import <QDebug>
现在我需要把所有的东西都输出到stdout,但是我不知道如何轻松地做到这一点。

QTextStream cout(stdout, QIODevice::WriteOnly);

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

qgelzfjb

qgelzfjb1#

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!";
}
6ojccjat

6ojccjat2#

最好的方法就是你提到的方法,你不需要创建一个新的局部变量:

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

如果源文本不是Latin-1编码,那么在将其传递给流操作符之前,需要将其转换为QString

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

相关问题