"strict" QML 模式?
"strict" mode for QML?
Qt 的 QML 语言是否提供任何类型的 "strict" 模式?特别是,我想要两个功能:
- 引用
undefined
或 null
时应用程序崩溃(例如 foo = bar
当 foo
是现有的 属性 但 bar
不是已定义,并且 foo.bar
当 foo
为空时)
- "hard" 断言(
console.assert
特性不会使应用程序崩溃)。
1.使用 qml lint
运行 构建设置中所有 .qml 和 .js 文件的 qmllint
find ./myproject -type f -regex ".*\.\(qml\|js\)" -exec "$QT_DIR/bin/qmllint" \{\} +
2。 QML 上的应用程序崩溃 error/warning
编写自定义 QDebug 消息处理函数 static void handler(QtMsgType type, const QMessageLogContext& context, const QString &message);
您通过 qInstallMessageHandler(&MyQDebugMessageHandler::handler);
注册,将 QML 警告转换为致命日志:
if (type == QtWarningMsg)
{
auto fatalWarnings = std::vector<QString>{
QStringLiteral("ReferenceError:"),
QStringLiteral("is not a type"),
QStringLiteral("File not found"),
};
for (const auto &s : fatalWarnings)
{
if (message.contains(s))
{
type = QtFatalMsg;
break;
}
}
}
然后确保 QtFatalMsg
类型的 QDebug 消息使应用程序崩溃。
3。 console.assert()
时崩溃
console.assert()
会产生错误,但没有特定的错误来检测它们。因此,调整第 2 点,使应用程序也因错误而崩溃。
Qt 的 QML 语言是否提供任何类型的 "strict" 模式?特别是,我想要两个功能:
- 引用
undefined
或null
时应用程序崩溃(例如foo = bar
当foo
是现有的 属性 但bar
不是已定义,并且foo.bar
当foo
为空时) - "hard" 断言(
console.assert
特性不会使应用程序崩溃)。
1.使用 qml lint
运行 构建设置中所有 .qml 和 .js 文件的 qmllint
find ./myproject -type f -regex ".*\.\(qml\|js\)" -exec "$QT_DIR/bin/qmllint" \{\} +
2。 QML 上的应用程序崩溃 error/warning
编写自定义 QDebug 消息处理函数 static void handler(QtMsgType type, const QMessageLogContext& context, const QString &message);
您通过 qInstallMessageHandler(&MyQDebugMessageHandler::handler);
注册,将 QML 警告转换为致命日志:
if (type == QtWarningMsg)
{
auto fatalWarnings = std::vector<QString>{
QStringLiteral("ReferenceError:"),
QStringLiteral("is not a type"),
QStringLiteral("File not found"),
};
for (const auto &s : fatalWarnings)
{
if (message.contains(s))
{
type = QtFatalMsg;
break;
}
}
}
然后确保 QtFatalMsg
类型的 QDebug 消息使应用程序崩溃。
3。 console.assert()
时崩溃console.assert()
会产生错误,但没有特定的错误来检测它们。因此,调整第 2 点,使应用程序也因错误而崩溃。