4

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

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

QTextStream cout(stdout, QIODevice::WriteOnly);

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

4

2 回答 2

6

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!";
}
于 2017-03-19T02:10:45.997 回答
2

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

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

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

QTextStream(stdout) << QString::fromUtf8("utf8 literal") << endl;
于 2017-03-19T01:53:40.623 回答