c++ - 在 Qt : Can I output to `stdout` , 中,我可以使用 qDebug() 输出到 `stderr` 吗?

标签 c++ qt stdout qdebug qtextstream

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

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

QTextStream cout(stdout, QIODevice::WriteOnly);

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

最佳答案

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

关于c++ - 在 Qt : Can I output to `stdout` , 中,我可以使用 qDebug() 输出到 `stderr` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42881940/

相关文章:

c++ - C++ 的数据库访问库

qt - QLabel 中图像附近的垂直居中文本

batch-file - 在批处理文件中,如何抑制 FOR/F 命令中的命令的输出

Python stdout 在调用 curses 后没有正确刷新

c++ - `f(void)` 表示 C++11 或 C 中没有参数?

c++ - 分离c++文件

c++ - 将 QTablewidget 的更改值转换为 QStringList

c++ - 为什么方法重载或枚举标志定义会触发 gcc7.2 编译器警告?

c++ 帮助读取 stdin 和 stdout 。还有运算符重载

c++ - 在光线追踪中对球体进行荒谬的反射