在QML中,只有一个对象可以具有键盘焦点(每个窗口)。在我的应用程序中,我需要选择具有键盘焦点的多个对象,因此我将自定义事件调度程序与自定义多选项实现结合使用。
但问题是,每次点击任何库存控制元素时,它们都会自动窃取焦点,从而破坏自定义事件调度程序。
除此之外,在叠加弹出窗口等情况下,仍然需要显式设置另一个焦点项。
答案 0 :(得分: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.
}
答案 1 :(得分: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
}
}
}
由于只有覆盖对话框应该从事件调度程序获取焦点,因此对话框基本类型会自动处理对焦显示和隐藏的获取和恢复焦点。
因此,从“一个项目可能有焦点”我移动到“一个项目可能有明确的焦点”,导致每当一个控制元素可能会窃取它时,重新启用该项目的焦点。