禁用QML控制台log()消息

3
我们正在调试应用程序的最终版本,并成功在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()函数仍在记录信息。

我还发现这个来源清晰地说明: 输出使用C++中的qDebug、qWarning、qCritical方法生成(请参见调试技术)。

这对我来说没有太多意义,因为我已经忽略了所有的qDebugs()

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

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

有关更多信息,请留言。

注:我知道链接是针对Qt 5的,但我正在使用Qt 4.8。

提前感谢!


你可以尝试使用这个链接 https://dev59.com/aHM_5IYBdhLWcg3wzmvM 来禁用console.log()。 - demonplus
我看到了那篇文章,但我认为它对于应该很容易实现的东西使用了太多的资源。据我所知,使用QT_NO_DEBUG_OUTPUT,我相当确定它会从代码中删除它,因为我的应用程序大小减小了。我原本期望有任何类似的宏。无论如何,谢谢! :) - David Sánchez
2个回答

1
如果QT_NO_DEBUG_OUTPUT成功禁用了Qt代码中的输出,那么它应该对实现console.log()C++函数也起作用。然而,我认为这些功能宏故意没有进行自动测试(太多宏,太少硬件资源来测试它们),因此任何错误报告都将被关闭,并且您将被鼓励提交自己的补丁。

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


很遗憾这对你没什么帮助,但在Qt 5中,只需使用QT_LOGGING_RULES环境变量禁用日志规则即可:

QT_LOGGING_RULES=qml=false

嗨!那是我可能的解决方案之一。我已经成功测试过了,我知道它可以工作,但正如我之前所说,我认为它使用了太多的资源(最终,是一个调用其他函数的函数)。我希望有一个宏可以像QT_NO_DEBUG_OUTPUT一样禁用/删除注释。我会等待看看其他答案是否提供更多信息,如果没有,我将接受这个答案。+1 对于如何在qt项目中处理的深入解释。 - David Sánchez

0

这是我用于最终发布的内容:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接