Qt的QML语言是否提供任何类型的“严格”模式?特别是,我喜欢有两个功能:
undefined
或null
(例如foo = bar
foo
是现有属性但bar
未定义,{{1} } {当foo.bar
为空时)foo
功能不会使应用程序崩溃)。答案 0 :(得分:9)
<强> 1。使用qml lint
在构建设置中的所有.qml和.js文件上运行qmllint
find ./myproject -type f -regex ".*\.\(qml\|js\)" -exec "$QT_DIR/bin/qmllint" \{\} +
<强> 2。关于QML错误/警告的崩溃应用
编写一个自定义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点以使应用程序崩溃。