如何禁用特定的 QML 调试器警告

Posted

技术标签:

【中文标题】如何禁用特定的 QML 调试器警告【英文标题】:How to disable specific QML debugger warning 【发布时间】:2018-05-25 06:35:09 【问题描述】:

我不想禁用来自 QML (as asked in this question) 的所有警告。相反,我想禁用特定类型的警告。在我的情况下,TypeError: Cannot read property of null 警告。

请注意,我收到此警告是因为Qt bug that affects grandchildren elements during their destruction,而不是因为任何代码错误,我相信。就我而言,每次更改特定的 GridView 模型时,我都会收到很多此类警告(10 秒到 100 秒),因此这些消息在控制台日志中占主导地位。

【问题讨论】:

这是一个错误,而不是警告。应该修复它而不是忽略... 【参考方案1】:

我认为高级解决方案可能基于安装自定义消息处理程序并拦截所有警告,过滤掉您喜欢以不同方式处理的任何警告并绕过其他人,例如,这可以处理您的情况:

// Default message handler to be called to bypass all other warnings.
static const QtMessageHandler QT_DEFAULT_MESSAGE_HANDLER = qInstallMessageHandler(0);
// a custom message handler to intercept warnings
void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString & msg)

    switch (type) 
    case QtWarningMsg: 
        if (!msg.contains("TypeError: Cannot read property of null")) // suppress this warning
            (*QT_DEFAULT_MESSAGE_HANDLER)(type, context, msg); // bypass and display all other warnings
        
    
    break;
    default:    // Call the default handler.
        (*QT_DEFAULT_MESSAGE_HANDLER)(type, context, msg);
        break;
    


int main(int argc, char *argv[])

    QGuiApplication app(argc, argv);
    qInstallMessageHandler(customMessageHandler); // install custom msg handler
...

【讨论】:

这是一个既漂亮又可怕的解决方案。美丽是因为代码清晰且运行良好。可怕,因为它涉及改变项目。谢谢!在解决 Qt 错误之前,我会一直使用它。

以上是关于如何禁用特定的 QML 调试器警告的主要内容,如果未能解决你的问题,请参考以下文章

[QT_QML]qml假如调试信息 qDebug console.debug

如何分析“绑定循环”

调试时禁用 chrome 数据保护程序

如何查找和禁用特定的 NVCC 警告?

如何在 VSCode 调试器中禁用“只是我的代码”设置?

如何防止 Visual Studio 警告缺少调试信息?