如何禁用特定的 QML 调试器警告
How to disable specific QML debugger warning
我不想禁用来自 QML (as asked in this question) 的所有警告。相反,我想禁用特定类型的警告。在我的例子中 TypeError: Cannot read property of null
警告。
请注意,我收到此警告是 Qt bug that affects grandchildren elements during their destruction 的结果,而不是任何代码错误的结果,我相信。就我而言,每次更改特定 GridView
模型时,我都会收到很多此类警告(10 到 100 秒),因此这些消息在控制台日志中占主导地位。
我认为高级解决方案可能基于安装自定义消息处理程序并拦截所有警告,过滤掉您喜欢的任何警告以不同方式处理 并绕过其他人,例如这可以处理你的情况:
// 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
...
}
我不想禁用来自 QML (as asked in this question) 的所有警告。相反,我想禁用特定类型的警告。在我的例子中 TypeError: Cannot read property of null
警告。
请注意,我收到此警告是 Qt bug that affects grandchildren elements during their destruction 的结果,而不是任何代码错误的结果,我相信。就我而言,每次更改特定 GridView
模型时,我都会收到很多此类警告(10 到 100 秒),因此这些消息在控制台日志中占主导地位。
我认为高级解决方案可能基于安装自定义消息处理程序并拦截所有警告,过滤掉您喜欢的任何警告以不同方式处理 并绕过其他人,例如这可以处理你的情况:
// 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
...
}