QML的“严格”模式?

时间:2016-04-08 16:09:27

标签: qt qml assert

Qt的QML语言是否提供任何类型的“严格”模式?特别是,我喜欢有两个功能:

  • 应用程序崩溃时引用undefinednull(例如foo = bar foo是现有属性但bar未定义,{{1} } {当foo.bar为空时)
  • “hard”断言(foo功能不会使应用程序崩溃)。

1 个答案:

答案 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点以使应用程序崩溃。