【发布时间】: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) 或类似的东西。
可用的 createComponent 或 createObject 方法不是我需要的,因为它们会创建新实例。
一些文件.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