你怎么能在QML JavaScript中失望?

How can you downcast in QML JavaScript?

提问人:Johannes Schaub - litb 提问时间:11/13/2023 最后编辑:Johannes Schaub - litb 更新时间:11/13/2023 访问量:66

问:

Javascript 是一种动态类型语言,据我所知,它没有静态类型检查的概念......

但是QML的qmllint程序试图将静态类型检查应用于QML文档的Javascript子集,并对此代码发出警告:

[构建]警告:/home/user/project/Plot.qml:162:2:在类型“QQuickItem”[missing-property]上找不到成员“colorAccess”

[build] itemAt(index).colorAccess.value = "" + newColor
[build]               ^^^^^^^^^^^

周围的元素是一个中继器。QMLLint 查看 qmltypes 文件,发现它有一个返回 .但完整的故事是,我们只使用具有属性的委托。我们怎样才能把这些知识传授给小猫呢?itemAtQQuickItem*colorAccess

QML QT6 QML林特

评论

0赞 Aykhan Hagverdili 11/13/2023
你为什么不创建一个子类型,而不是承诺 linter 字段存在?QQuickItemcolorAccess
0赞 Johannes Schaub - litb 11/13/2023
我就是这样做的!我的委托是具有名为 的属性。我没有做出任何承诺。Linter自己推断了一切。我不相信它连接了 和 之间的点.Item { .. }colorAccessitemAtdelegate

答:

2赞 Johannes Schaub - litb 11/13/2023 #1

对于这种情况,应根据QML文档使用-Type-assertions。不幸的是,QMLLint 的文档中没有对此进行解释,而仅在链接页面上进行了解释,据我所知 https://doc.qt.io/qt-6/qtqml-javascript-hostenvironment.html#type-annotations-and-assertionsas

因此:

(itemAt(index) as TypeOfTheDelegate).colorAccess = ...

我认为这对我们来说并没有得到回报,我们将不得不将 QMLLinter 的警告保留在我们的代码库中。