【问题标题】:Disable QML console.log() messages禁用 QML console.log() 消息
【发布时间】:2015-11-19 10:42:26
【问题描述】:

我们正在调整应用程序的最终版本,并且我们成功地禁用了 c++ 中的调试消息。

CONFIG(release, debug|release):{
    message(Building in release mode. We deactivate the logs.)
    DEFINES += QT_NO_DEBUG_OUTPUT
} else {
    message(Building in debug mode.)
}

但是,我们的 QML javascript console.log() 函数仍在记录信息。

我还发现this source 明确指出: 使用 C++ 中的 qDebug、qWarning、qCritical 方法生成输出(另请参阅调试技术)。

什么对我没有多大意义,因为我已经忽略了所有的 qDebugs()

所以,问题是: 如何忽略所有的console.log()?

我只是认为这应该是一项简单的任务,类似于 qDebug() 消息。

如需了解更多信息,请发表评论。

注意:我知道该链接适用于 Qt 5,但我使用的是 Qt 4.8。

提前致谢!

【问题讨论】:

  • 你可以尝试使用这个stackoverflow.com/questions/1215392/…来禁用console.log()
  • 我看到了那篇文章,但我认为正在使用大量资源来实现应该很容易实现的东西。 AFAIK,使用 QT_NO_DEBUG_OUTPUT 我很确定它确实删除了代码,因为我的应用程序的大小减小了。我期待任何类似的宏。不管怎么说,还是要谢谢你! :)

标签: javascript qt qml


【解决方案1】:

如果QT_NO_DEBUG_OUTPUT 成功禁用Qt 代码中的输出,它应该对实现console.log()C++ functions 执行相同的操作。但是,我相信这些功能宏是故意不自动测试的(宏太多,硬件资源太少,无法测试它们),所以任何错误报告都将被关闭,我们鼓励您自己提交补丁。

另一个解决方案可能是使用qInstallMessageHandler(),如this 问题的答案中所述。


不幸的是,这对您没有帮助,但在 Qt 5 中,使用 QT_LOGGING_RULES 环境变量禁用 logging rule 就足够了:

QT_LOGGING_RULES=qml=false

【讨论】:

  • 嗨!那是我可能的解决方案之一。我已经成功测试并且我知道它可以工作,但正如我之前所说,我认为它正在使用很多资源(最后,是一个调用其他函数的函数)。我期待一个宏将禁用/删除 cmets 作为 QT_NO_DEBUG_OUTPUT。我会等着看其他答案是否提供更多信息,如果没有,我会接受这个作为答案。 +1 用于深入解释 qt 项目中的处理方式。
【解决方案2】:

这是我用于最终版本的内容:

qputenv("QT_LOGGING_RULES", QByteArray("*.debug=false;qml=false"));

【讨论】:

    猜你喜欢
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 2014-04-13
    相关资源
    最近更新 更多