在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