QML父级变更后MouseArea的containsMouse属性返回值异常如何解决
问题原因
Qt的MouseArea的containsMouse属性更新依赖鼠标移动/进出事件触发,当Item跨窗口变更父级时,Qt不会主动触发当前鼠标位置的校验逻辑,因此会出现属性不同步的问题。
解决方案
方法一:手动触发刷新
在重设父级的逻辑后,临时关闭再重新开启MouseArea的hoverEnabled开关,即可强制Qt重新计算当前hover状态:
Keys.onPressed: { if(event.key === Qt.Key_Control){ second_window.show() square.parent = second_window.contentItem // 新增以下两行刷新状态 my_mouse_area.hoverEnabled = false my_mouse_area.hoverEnabled = true } }
方法二:自动适配所有父级变更场景
如果需要适配任意父级修改的情况,可以直接在MouseArea内添加父级变化监听,自动触发状态刷新:
MouseArea { id: my_mouse_area anchors.fill: parent hoverEnabled: true onClicked: { my_mouse_area.x = 200 } // 父级变化时自动刷新hover状态 onParentChanged: { hoverEnabled = false hoverEnabled = true } }
两种方案都可以实现containsMouse属性的即时同步,修改后Item移动到新窗口后会立即根据当前鼠标位置更新属性值,UI展示也会同步修正。
内容的提问来源于stack exchange,提问作者comp1201
相关产品推荐
相关产品推荐

