2017-04-23 119 views
1

在QML中,只有一個對象可以具有鍵盤焦點(每個窗口)。在我的應用程序中,我需要具有多個鍵盤焦點對象的選項,因此我使用自定義事件調度程序與自定義多選選項實現相結合。防止控件竊取鍵盤焦點

然而,問題是每次點擊任何股票的控制元素時,他們會自動竊取焦點,打破自定義事件分派器。

除此之外,在疊加彈出窗口等情況下,仍需要顯式設置另一個焦點項目。

回答

0

我結束了這個接口,適用於全聚焦能力項目:

Item { 
    onFocusChanged: if (keepFocus) focus = true 
    property bool keepFocus: false 
    property Item prevFocus: null 
    function getFocus() { 
    if (prevFocus) { 
     prevFocus.keepFocus = false 
     keepFocus = true 
     focus = true 
    } 
    } 
    function restoreFocus() { 
    if (prevFocus) { 
     keepFocus = false 
     prevFocus.keepFocus = true 
     prevFocus.focus = true 
    } 
    } 
} 

由於只覆蓋對話框都應該採取焦點從事件調度,對話基本類型自動處理的獲取和恢復側重於對話顯示和隱藏。

因此,從「一個項目可能有焦點」我移動到「一個項目可能有明確的焦點」,每當一個控制元素可能會竊取它重新啓用該項目的焦點。

1

我不確定它如何適合您的自定義事件的東西,但這個答案也可以幫助其他人找到你的問題,但只是希望防止控制獲得焦點。

您可以防止控制從得到的焦點與focusPolicy enum

Button { 
    focusPolicy: Qt.NoFocus 
    // Other options: 
    // focusPolicy: Qt.TabFocus - The control accepts focus by tabbing. 
    // focusPolicy: Qt.ClickFocus - The control accepts focus by clicking. 
    // focusPolicy: Qt.StrongFocus - The control accepts focus by both tabbing and clicking. 
    // focusPolicy: Qt.WheelFocus - The control accepts focus by tabbing, clicking, and using the mouse wheel. 
} 
+0

這也可以做的伎倆,但它增加了必須手動添加到每個控制元件的不便。使其成爲不太可取的選項,除非可以覆蓋全局默認設置。它可以? – dtech

+0

啊,對...不,我沒有意識到。不過,我認爲不可能添加這樣的功能。如果我沒有記錯的話,有一個類似的懸停支持環境變量。 – Mitch