在将 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)
或类似内容。
可用的 createComponent
或 createObject
方法不是我需要的,因为它们会创建新实例。
一些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。
仍未解决 虽然我的错误修复适用于文本项,但不适 却适用于 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)
或类似内容。
可用的 createComponent
或 createObject
方法不是我需要的,因为它们会创建新实例。
一些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。