如何在未聚焦的QtQuick项目中接收键盘事件?;

如何在未聚焦的QtQuick项目中接收键盘事件?;,qt,qml,qtquick2,qt-quick,qtquickcontrols2,Qt,Qml,Qtquick2,Qt Quick,Qtquickcontrols2,我想使用按住行为切换gui项目的状态。 我使用聚焦镜(以下)接收键盘事件 FocusScope{ id:pageFocus property var pedalKey//a key id Keys.enabled: true Keys.onPressed: { if(event.key===pedalKey && !event.isAutoRepeat) { state="a"

我想使用按住行为切换gui项目的状态。

我使用
聚焦镜
(以下)接收键盘事件

FocusScope{
    id:pageFocus

    property var pedalKey//a key id

    Keys.enabled: true
    Keys.onPressed: {
        if(event.key===pedalKey && !event.isAutoRepeat)
        {
            state="a"
        }
    }
    Keys.onReleased: {
        if(event.key===pedalKey && !event.isAutoRepeat)
        {
            state="b"
        }
    }
}
它可以工作,但当
FocusScope
失去焦点时。
最可怕的是,我不知道哪个
项目得到了关注。
是否有任何方法可以使
在无焦点的情况下接收键盘事件

它可以工作,但当聚焦镜失去焦点时

是的,关键事件仅传递给具有activeFocus的项目。事件将首先发送到最内部的项,沿着父项链向上移动,直到其中一个接受事件(例如,使用您在此处使用的处理程序)

最可怕的是,我不知道哪个项目得到了关注

您可以使用查看焦点当前所在的位置

是否有任何方法可以使该项在没有焦点的情况下接收键盘事件


不容易或不直接。在事件到达窗口之前,可以使用事件过滤拦截事件,但我认为这绝对是最后的选择。是另一种可能性,取决于您试图拦截的按键。

您可以将按键事件转发给其他对象(甚至多个对象)。是Qt文档中的示例:

Item {
    ListView {
        id: list1
        // ...
    }
    ListView {
        id: list2
        // ...
    }
    Keys.forwardTo: [list1, list2]
    focus: true
}

事实上,如果有一个“已知”的项目集将具有焦点,这是一个很好的建议!