Как отключить определенное предупреждение отладчика QML

Я не хочу отключать все предупреждения от QML ( как задано в этом вопросе). Вместо этого я хочу отключить определенный тип предупреждения. В моем случае TypeError: Cannot read property of null предупреждение.

Обратите внимание, что я получаю это предупреждение в результате ошибки Qt, которая влияет на элементы внуков во время их уничтожения, а не в результате каких-либо ошибок кода, я полагаю. В моем случае я получаю много таких предупреждений (от 10 до 100) каждый раз, когда GridView модель изменена, поэтому эти сообщения доминируют в журнале консоли.

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
...
}
Другие вопросы по тегам