在将 QtQuick / QML object 传递给 javascript 函数后访问它的属性

Access properties of an QtQuick / QML object after passing it to a javascript function

仍未解决 虽然我的错误修复适用于文本项,但不适 却适用于 MouseArea。 console.log(key.keyMouseArea) 结果为 'undefined'。但是我可以使用 key.children[1] !?!?!

访问它

部分解决:我的错,因为text是child的属性,我可以使用[=17访问它=].

我使用 this 指针将 QtQuick object 传递给另一个 QtQuick object 的 javascript 函数。在被调用的函数中,我可以在日志输出中看到传递成功 (VirtualKey_QMLTYPE_0(0x14a6bf0))。现在,我希望访问此 object 的属性,但 object 是匿名的,或者如此。如何将此参数转换或强制转换为其原始类型?

类似 Qt.castToQtQuickObject(pointer, VirtualKey) 或类似内容。

可用的 createComponentcreateObject 方法不是我需要的,因为它们会创建新实例。

一些file.qml:

Controller {
  id: controller
}

VirtualKey {
  Text { // didn't think of this child when asking ...
    id: textField
    text: "Hallo"
  }
  MouseArea {
    objectName: "mouse"
    id: keyMouseArea
  }
  Component.onCompleted: {
    controller.registerKey(this) // passing this instance of VirtualKey
  }

}

Controller.qml:

QtObject {
    function registerKey(key) {

        console.log("VKC: registering key " + key)

        // Output: VirtualKey_QMLTYPE_0(0x14a6bf0)

        console.log(key.textField) // works

        console.log(key.keyMouseArea) // undefined !!!

        console.log(key.children[1]) // works

        console.log(key.children[1].objectName) // -> "mouse"

    }
}

出于某种原因,我在 VirtualKey 中为文本项设置了 属性 别名。这就是它适用于 textField 但不适用于 keyMouseArea 的原因。

在 VirtualKey 中添加 property alias keyMouseArea: keyMouseArea 解决了我的问题。现在我可以使用 key.keyMouseArea 访问 MouseArea。