【问题标题】:Access properties of an QtQuick / QML object after passing it to a javascript function将 QtQuick / QML 对象传递给 javascript 函数后访问其属性
【发布时间】:2019-09-03 13:48:34
【问题描述】:

仍未解决虽然我的错误修复适用于文本项,但它适用于 MouseArea。 console.log(key.keyMouseArea) 导致“未定义”。但我可以使用key.children[1] !?!?! 访问它!

部分解决:我的错,因为text 是孩子的财产,我可以使用key.textField.text 访问它。

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

类似Qt.castToQtQuickObject(pointer, VirtualKey) 或类似的东西。

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

一些文件.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"

    }
}

【问题讨论】:

  • 这应该可行,请提供可重现的示例
  • 你真的尝试登录key.text吗?如果是这样,输出是什么?据我所知,QML&Javascript 在这件事上非常灵活,您应该能够获得该属性的价值
  • 我不会基于 JS this。您可以尝试为对象设置id 并传递它吗?
  • 谢谢,如果问题仍然存在,明天将提供一个示例。记录 key.txt 打印“未定义”。

标签: javascript qt qml qtquick2 qt-quick


【解决方案1】:

出于某种原因,我在VirtualKey 中有一个Text 项的属性别名。这就是它适用于 textField 但不适用于 keyMouseArea 的原因。

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

【讨论】:

    猜你喜欢
    • 2014-11-16
    • 1970-01-01
    • 2014-06-08
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多