如何在未获得焦点的 QtQuick Item 中接收键盘事件?
How to receive keyboard events in an unfocused QtQuick Item?
我想使用按住行为来切换 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
在没有焦点的情况下接收键盘事件?
It works, but when FocusScope lost the focus.
是的,按键事件仅传递给具有 activeFocus 的项目。该事件将首先发送到 inner-most 项,沿着父项链向上传递,直到其中一个接受事件(例如使用您在此处使用的处理程序)。
The most terrible thing is that I don't know which Item got the focus.
您可以使用 Window.activeFocusItem
attached property 查看当前焦点所在的位置。
Is there any way to enable the Item to receive keyboard events without focus?
不容易或直接。您可以使用事件过滤在事件到达 window 之前拦截事件,但我认为这绝对是最后的选择。 Shortcut
s 是另一种可能性,具体取决于您要拦截的印刷机。
您可以将按键事件转发给其他对象(甚至多个对象)。 Here 是 Qt 文档中的示例:
Item {
ListView {
id: list1
// ...
}
ListView {
id: list2
// ...
}
Keys.forwardTo: [list1, list2]
focus: true
}
我想使用按住行为来切换 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
在没有焦点的情况下接收键盘事件?
It works, but when FocusScope lost the focus.
是的,按键事件仅传递给具有 activeFocus 的项目。该事件将首先发送到 inner-most 项,沿着父项链向上传递,直到其中一个接受事件(例如使用您在此处使用的处理程序)。
The most terrible thing is that I don't know which Item got the focus.
您可以使用 Window.activeFocusItem
attached property 查看当前焦点所在的位置。
Is there any way to enable the Item to receive keyboard events without focus?
不容易或直接。您可以使用事件过滤在事件到达 window 之前拦截事件,但我认为这绝对是最后的选择。 Shortcut
s 是另一种可能性,具体取决于您要拦截的印刷机。
您可以将按键事件转发给其他对象(甚至多个对象)。 Here 是 Qt 文档中的示例:
Item {
ListView {
id: list1
// ...
}
ListView {
id: list2
// ...
}
Keys.forwardTo: [list1, list2]
focus: true
}