Qt QML的“严格”模式?

Qt QML的“严格”模式?,qt,qml,assert,Qt,Qml,Assert,Qt的QML语言是否提供任何类型的严格模式?特别是,我想要两个功能: 引用未定义或null时应用程序崩溃,例如,当foo是现有属性但未定义bar时,foo=bar;当foo为null时,foo.bar 硬断言console.assert功能不会使应用程序崩溃。 一,。使用qml皮棉 在生成设置中的所有.qml和.js文件上运行qmlint find ./myproject -type f -regex ".*\.\(qml\|js\)" -exec "$QT_DIR/bin/qmllint" \

Qt的QML语言是否提供任何类型的严格模式?特别是,我想要两个功能:

引用未定义或null时应用程序崩溃,例如,当foo是现有属性但未定义bar时,foo=bar;当foo为null时,foo.bar 硬断言console.assert功能不会使应用程序崩溃。 一,。使用qml皮棉

在生成设置中的所有.qml和.js文件上运行qmlint

find ./myproject -type f -regex ".*\.\(qml\|js\)" -exec "$QT_DIR/bin/qmllint" \{\} +
二,。QML上的应用程序崩溃错误/警告

编写自定义QDebug消息处理程序函数static void handlerQtMsgType 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消息使应用程序崩溃

三,。console.assert上的崩溃

console.assert会创建错误,但没有特定于检测错误的内容。因此,调整第2点。在出现错误时使应用程序崩溃。

1。使用qml皮棉

在生成设置中的所有.qml和.js文件上运行qmlint

find ./myproject -type f -regex ".*\.\(qml\|js\)" -exec "$QT_DIR/bin/qmllint" \{\} +
二,。QML上的应用程序崩溃错误/警告

编写自定义QDebug消息处理程序函数static void handlerQtMsgType 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消息使应用程序崩溃

三,。console.assert上的崩溃


console.assert会创建错误,但没有特定于检测错误的内容。因此,调整第2点。在出现错误时使应用程序崩溃。

是否要崩溃?@ddriver是,在开发过程中。比试图读取控制台输出并猜测各种问题有多严重要容易得多。在我看来,这是一个设计得不太好的应用程序,至少在QML方面是如此。@ddriver有关崩溃应用程序的更一般的防御,以及一篇我碰巧喜欢并喜欢推广的关于错误处理的文章,请参阅“错误是不可恢复的错误”一节!这里:我不知道读取控制台输出有这么难。。。或者说崩溃比得到一条消息要好出了什么问题,哪里出了问题。@ddriver在这种情况下,控制台输出中充斥着无关紧要的东西。这次事故应该包括一条关于什么地方出了问题的信息;这不是非此即彼。你想要崩溃吗?@ddriver是的,在开发过程中。比试图读取控制台输出并猜测各种问题有多严重要容易得多。在我看来,这是一个设计得不太好的应用程序,至少在QML方面是如此。@ddriver有关崩溃应用程序的更一般的防御,以及一篇我碰巧喜欢并喜欢推广的关于错误处理的文章,请参阅“错误是不可恢复的错误”一节!这里:我不知道读取控制台输出有这么难。。。或者说崩溃比得到一条消息要好出了什么问题,哪里出了问题。@ddriver在这种情况下,控制台输出中充斥着无关紧要的东西。这次事故应该包括一条关于什么地方出了问题的信息;这不是非此即彼。我怎么不知道qmlint的事?自从我开始开发这个GUI以来,我就一直想要这样的东西。非常感谢你做的一切,我的天啊。我怎么不知道qmlint的事?自从我开始开发这个GUI以来,我就一直想要这样的东西。非常感谢你做的一切。