我最终得到了这个界面,应用于所有可聚焦的项目:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于只有覆盖对话框才应该从事件调度程序获取焦点,因此对话框基本类型会自动处理分别在对话框显示和隐藏时获取和恢复焦点。
因此,我从“一个项目可能具有焦点”转向“一个项目可能具有显式焦点”,从而导致只要 Control 元素可能窃取该项目的焦点,就会为该项目重新启用焦点。