到目前为止,我使用qDebug().noquote()输出所有内容,这很容易,因为它只需要一个简单的#import <QDebug>现在我需要把所有的东西都输出到stdout,但是我不知道如何轻松地做到这一点。
qDebug().noquote()
#import <QDebug>
stdout
QTextStream cout(stdout, QIODevice::WriteOnly);
然而,创建一个新对象要比创建一个简单的#import <QDebug>麻烦一些,在qt中处理stdout的好的/最不麻烦的方法是什么?
qgelzfjb1#
qDebug(),qInfo()等都通过管道连接到默认的消息处理程序,但是您可以轻松地安装自己的消息处理程序,将调试字符串写入不同的流、文件或任何内容,您所需要做的就是定义一个消息处理程序函数,并使用qInstallMessageHandler()安装它。下面是一个完整的示例,将所有这些放在一起:
qDebug()
qInfo()
#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!"; }
6ojccjat2#
最好的方法就是你提到的方法,你不需要创建一个新的局部变量:
QTextStream(stdout) << "Hello world!" << Qt::endl;
如果源文本不是Latin-1编码,那么在将其传递给流操作符之前,需要将其转换为QString:
QString
QTextStream(stdout) << QString::fromUtf8("utf8 literal") << Qt::endl;
2条答案
按热度按时间qgelzfjb1#
qDebug()
,qInfo()
等都通过管道连接到默认的消息处理程序,但是您可以轻松地安装自己的消息处理程序,将调试字符串写入不同的流、文件或任何内容,您所需要做的就是定义一个消息处理程序函数,并使用qInstallMessageHandler()安装它。下面是一个完整的示例,将所有这些放在一起:
6ojccjat2#
最好的方法就是你提到的方法,你不需要创建一个新的局部变量:
如果源文本不是Latin-1编码,那么在将其传递给流操作符之前,需要将其转换为
QString
: