【问题标题】:Copy qDebug() output复制 qDebug() 输出
【发布时间】:2013-10-09 21:47:13
【问题描述】:

我想将 qDebug() 输出保留在日志文件中并在控制台上显示,我已经尝试过:

qDebug() << "Hand's up!";
QTextStream stream(stdout);
QTextStream out(&logFile);
out << stream.readAll();

但即使我将stdout 替换为stderr,它也根本不起作用

【问题讨论】:

    标签: c++ qt logging


    【解决方案1】:

    您可以安装自己创建的消息处理程序,这里有一个很棒的最小示例:Nokia Wiki: how to redirect qDebug output to a file。这将允许您正常使用 qDebug() 调用并将其输出,并且您可以在消息被写出时对其进行调整。

    【讨论】:

    • 我会稍微修改一下代码,因为对于致命消息,程序将在将消息写入文本文件之前中止。
    • 好点,前段时间我写了一个变体,忘了修复它。
    • 我试过你的,这是我得到的use of undeclared identifier 'qInstallMsgHandler'; did you mean 'qInstallMessageHandler' ,所以我更正了,结果更糟
    • 你是对的 Samoth,API 已经随着 Qt5 改变。新的函数处理程序有一个额外的参数。请参阅qInstallMessageHandler的文档
    • 您可以在创建QApplication 的实例时设置应用程序名称,然后在程序中的任何位置从该类访问它。
    【解决方案2】:

    使用QDebug 类而不是仅仅使用qDebug()

    qDebug() 使用默认设置创建调试对象,例如将输出字符串发送到何处。如果您自己创建一个对象,您将拥有更多的控制权。

    【讨论】:

    • 这仅适用于您自己的调试消息。对于您尚未编写的代码,例如在 Qt 库中,您需要使用 Nocholas Smith 的答案来捕获这些消息。
    • @RobbieE 事实上,我只想要我的。但我不明白如何将流复制到文件而不从输出中删除它
    猜你喜欢
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2012-07-30
    相关资源
    最近更新 更多