【发布时间】:2018-12-17 23:56:51
【问题描述】:
这是我的代码中的一个例外:
Keys.onPressed: {
if ((event.modifiers & Qt.AltModifier) && (event.modifiers & Qt.ControlModifier) && event.key === Qt.Key_Plus) {
zoom(true, false);
}
if ((event.modifiers & Qt.AltModifier) && (event.modifiers & Qt.ControlModifier) && event.key === Qt.Key_Minus) {
zoom(false, false);
}
}
Shortcut {
id: zoomInX
sequence: StandardKey.ZoomIn
onActivated: {
zoom(true, true);
}
}
Shortcut {
id: zoomOutX
sequence: StandardKey.ZoomOut
onActivated: {
zoom(true, false);
}
}
function zoom(zoomIn, zoomX) {
...
}
zoom 函数可以从 Keys.onPressed 代码中很好地调用。
但是当从快捷方式的onActivated 代码调用zoom 函数时,我收到以下消息:
... W: unknown: ... ReferenceError: zoom is not defined
这是为什么?我该如何解决?
我原以为缩放功能可用于 Keys 项目,它也可用于 Shortcut 项目,并且通过闭包也可用于 onActivated 代码。
来自文档:
在 QML 中,组件实例将它们的组件范围连接在一起 形成范围层次结构。组件实例可以直接访问 其祖先的组件范围。
【问题讨论】:
-
显然,如果我写了ancestItemName.zoom,它就可以工作。我仍然不确定为什么我需要这样做。 QML 是否自动将函数设置为定义它们的 QML 对象的 JavaScript 表示的属性?
-
是的,QML 会自动将函数设置为它所定义的 QML 对象的一部分