2017-01-16 33 views
1

我想使用按住行爲來切換gui Item的狀態。
如何接收未聚焦的QtQuick Item中的鍵盤事件?

我使用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接收沒有焦點的鍵盤事件嗎?

回答

2

它的工作原理,但是當FocusScope失去焦點時。

是的,關鍵事件只會傳遞給activeFocus項目。事件將首先發送到最內層的項目,繼續父項鍊,直到其中一個接受事件(使用例如您在此使用的處理程序)。

最可怕的是我不知道哪個項目得到了重點。

您可以使用Window.activeFocusItem attached property來查看焦點當前的位置。

有什麼辦法可以讓項目接收沒有焦點的鍵盤事件嗎?

不容易或直接。您可以使用事件過濾在事件到達窗口之前攔截事件,但我會認爲這絕對是最後一招的選擇。 Shortcuts是另一種可能性,具體取決於您試圖攔截的按鍵。

2

您可以將關鍵事件轉發給其他對象(即使是多個對象)。 Here就是Qt文檔中的例子:

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

事實上,一個好的建議是否有一個「已知」的項目將有焦點! –

相關問題