我想使用按住行为来切换gui项目的状态。
我使用FocusScope
(下方)来接收键盘事件。
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
失去焦点时
最可怕的是我不知道哪个Item
得到了关注
有没有办法让Item
无焦点地接收键盘事件?
答案 0 :(得分:2)
它可以工作,但是当FocusScope失去焦点时。
是的,关键事件仅传递给具有activeFocus的项目。该事件将首先发送到最内层项目,然后继续向父母链接,直到其中一个接受事件(例如使用您在此处使用的处理程序)。
最可怕的是我不知道哪个项目得到了关注。
您可以使用Window.activeFocusItem
attached property查看当前焦点的位置。
有没有办法让Item能够在没有焦点的情况下接收键盘事件?
不容易或不直接。您可以使用事件过滤来拦截事件到达窗口之前,但我认为这绝对是最后的选择。 Shortcut
s是另一种可能性,取决于您试图拦截的按压。
答案 1 :(得分:2)
您可以将关键事件转发给其他对象(甚至是多个对象)。 Here是Qt的文档中的示例:
Item {
ListView {
id: list1
// ...
}
ListView {
id: list2
// ...
}
Keys.forwardTo: [list1, list2]
focus: true
}