如何在未聚焦的QtQuick项目中接收键盘事件?;
我想使用按住行为切换gui项目的状态。如何在未聚焦的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"
我使用
聚焦镜
(以下)接收键盘事件
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
}
事实上,如果有一个“已知”的项目集将具有焦点,这是一个很好的建议!