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

时间:2018-05-25 06:35:09

标签: qt qml suppress-warnings

我不想禁用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 个答案:

答案 0 :(得分: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
...
}