在QML中,只有一個對象可以具有鍵盤焦點(每個窗口)。在我的應用程序中,我需要具有多個鍵盤焦點對象的選項,因此我使用自定義事件調度程序與自定義多選選項實現相結合。防止控件竊取鍵盤焦點
然而,問題是每次點擊任何股票的控制元素時,他們會自動竊取焦點,打破自定義事件分派器。
除此之外,在疊加彈出窗口等情況下,仍需要顯式設置另一個焦點項目。
在QML中,只有一個對象可以具有鍵盤焦點(每個窗口)。在我的應用程序中,我需要具有多個鍵盤焦點對象的選項,因此我使用自定義事件調度程序與自定義多選選項實現相結合。防止控件竊取鍵盤焦點
然而,問題是每次點擊任何股票的控制元素時,他們會自動竊取焦點,打破自定義事件分派器。
除此之外,在疊加彈出窗口等情況下,仍需要顯式設置另一個焦點項目。
我結束了這個接口,適用於全聚焦能力項目:
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
}
}
}
由於只覆蓋對話框都應該採取焦點從事件調度,對話基本類型自動處理的獲取和恢復側重於對話顯示和隱藏。
因此,從「一個項目可能有焦點」我移動到「一個項目可能有明確的焦點」,每當一個控制元素可能會竊取它重新啓用該項目的焦點。
我不確定它如何適合您的自定義事件的東西,但這個答案也可以幫助其他人找到你的問題,但只是希望防止控制獲得焦點。
您可以防止控制從得到的焦點與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.
}
這也可以做的伎倆,但它增加了必須手動添加到每個控制元件的不便。使其成爲不太可取的選項,除非可以覆蓋全局默認設置。它可以? – dtech
啊,對...不,我沒有意識到。不過,我認爲不可能添加這樣的功能。如果我沒有記錯的話,有一個類似的懸停支持環境變量。 – Mitch