可以从Keys.onPressed处理程序调用JavaScript函数,但不能从Shortcuts onActivated处理程序调用。为什么?

时间:2018-12-17 15:24:22

标签: qt qml

这是我代码中的例外:

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) {
    ...
}

可以从Keys.onPressed代码中很好地调用zoom函数。

但是当从快捷方式的zoom代码调用onActivated函数时,我得到以下消息:

  

... W:未知:... ReferenceError:缩放未定义

这是为什么?我该如何解决?

我曾想过,由于“缩放”功能可用于“键”项,因此它也可用于Shortcut项,并且通过闭包也可用于onActivated代码。

从文档中

  

在QML中,组件实例将其组件作用域连接到   形成范围层次结构。组件实例可以直接访问   他们祖先的组成范围。

http://doc.qt.io/archives/qt-4.8/qdeclarativescope.html

1 个答案:

答案 0 :(得分:1)

正如您指出的,您必须使用祖先的ID来标识该功能,如果在祖先的范围内调用该函数,则可以省略该ID。如标识所示,这些是必需的,因为每个项目都可以定义具有相同名称的功能。