【问题标题】:QML mouseArea losing focus on releasing mouse buttonQML mouseArea 失去对释放鼠标按钮的关注
【发布时间】:2019-06-01 06:16:46
【问题描述】:

在我的程序中,屏幕上有多边形,您可以拖动它们的边、顶点或整个多边形。我想向用户展示鼠标在当前位置会发生什么。为此,我需要发生这种情况的 mouseArea 的 onPositionChanged 事件处理程序。

拖动工作正常,问题是鼠标释放时 mouseArea 失去焦点,所以当用户不按下鼠标按钮时我无法调用我的 onPositionChanged 函数。

HoverEnabled 在我的 mouseArea 中设置为 true。好像有其他对象一直在偷焦点,但是我将 preventStealing 设置为 true,将 focus 设置为 true,并在整个项目中寻找“焦点”一词,并删除了会窃取焦点的每一行项目中也没有 focusScopes .
示例代码:

MouseArea
{
    hoverEnaled: true
    focus: true
    preventStealing: true
    ...
    onPositionChanged:
    {
        doStuff();
        //Works fine while mouse button is pressed. Doesn't get called when it's released 
    }
    Component.onCompleted: forceActiveFocus();
    ...
}

【问题讨论】:

  • 您好,请为您的问题提供minimal reproducible example(即重现您的问题的代码)。我们中的一些人很难在脑海中画出一段。谢谢:-)
  • 谢谢 TrebuchetMS。我尝试在一个新项目中重现该问题,但即使在动态创建时 mouseArea 也能正常工作。看来,动态创建与错误无关。我将编辑问题。
  • 您好,Artur,感谢您编辑您的问题。现在,我...不明白这如何重现您的焦点被盗问题。是否有您将其锚定到的 mouseArea 的父级? (我也可以在onPositionChanged 中使用hoverEnabled:true 执行console.debug(mouseX, mouseY),即使释放鼠标也会打印输出,解决评论中提出的问题。)我可以肯定地说,这可能是一个最小的例子。但请确保它是Complete and Verifiable as well。谢谢。
  • 谢谢!在尝试复制我的问题时,我最终解决了它。

标签: qt qml


【解决方案1】:

我想通了! 在进入我的多边形屏幕之前,程序中有一个弹出窗口,它被不正确地关闭(而不是使用popup.close()popup.visible = false; popup.destroy();)。以正确的方式关闭它解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多