在 Qt 中:我可以像使用 qDebug() 输出到 stderr 一样简单地输出到 stdout 吗?
In Qt: Can I output to `stdout`, as easy as I can output to `stderr` using qDebug()?
到目前为止,我使用 qDebug().noquote()
输出所有内容。这很简单,因为它只需要一个简单的 #import <QDebug>
现在我需要将所有内容输出到 stdout
,但我不知道如何轻松完成。我是这样被教导的:
QTextStream cout(stdout, QIODevice::WriteOnly);
然而,创建一个新对象比简单的 #import <QDebug>
稍微麻烦一点。在qt中处理stdout
的good/least繁琐的方法是什么?
最好的办法就是你说的那个。您不必创建新的局部变量:
QTextStream(stdout) << "Hello world!" << endl;
如果源文本不是 Latin-1 编码,那么您需要先转换为 QString
,然后再将其传递给流运算符:
QTextStream(stdout) << QString::fromUtf8("utf8 literal") << endl;
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!";
}
到目前为止,我使用 qDebug().noquote()
输出所有内容。这很简单,因为它只需要一个简单的 #import <QDebug>
现在我需要将所有内容输出到 stdout
,但我不知道如何轻松完成。我是这样被教导的:
QTextStream cout(stdout, QIODevice::WriteOnly);
然而,创建一个新对象比简单的 #import <QDebug>
稍微麻烦一点。在qt中处理stdout
的good/least繁琐的方法是什么?
最好的办法就是你说的那个。您不必创建新的局部变量:
QTextStream(stdout) << "Hello world!" << endl;
如果源文本不是 Latin-1 编码,那么您需要先转换为 QString
,然后再将其传递给流运算符:
QTextStream(stdout) << QString::fromUtf8("utf8 literal") << endl;
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!";
}