gpt4 book ai didi

macos - QML Mac 全屏模式失去鼠标焦点

转载 作者:行者123 更新时间:2023-12-04 16:10:14 25 4
gpt4 key购买 nike

我正在使用 QML 构建一个支持全屏模式的 OSX 应用程序。我的意图是通过双击窗口的主要区域来切换全屏/正常模式,这里是最小代码:

import QtQuick 2.4
import QtQuick.Window 2.2

Window {
id: main
visible: true
width: 800; height: 480
flags: Qt.Window | Qt.WindowFullscreenButtonHint // for OSX native behavior support

MouseArea {
anchors.fill: parent
onDoubleClicked: {
if (main.visibility === Window.FullScreen) {
main.visibility = Window.AutomaticVisibility;
} else {
main.visibility = Window.FullScreen;
}
}
}
}

很简单,但是行为很奇怪:

每当应用程序的可见性状态发生变化(进入或离开)时,用户必须再次点击窗口,窗口模式才能再次改变,只需就像应用程序失去鼠标焦点

为了验证我的想法,我测试了更多东西,我在窗口中添加了一个 MouseArea(比方说 mouseAreaTest),它将窗口并排分开端并且可以接收onEnteredonExited事件。在应用程序进入退出全屏模式后,mouseAreaTest将永远不会收到任何进入或退出事件,除非您点击窗口再来一次,这不是我想要的。

我对 OSX 如何实现自己的全屏模式一无所知,也不知道为什么 OSX 上的 QML 会出现这样的错误问题。所以我希望有人会告诉我一些相关信息。


更新

后来我怀疑这是否只是QML的一些东西与QML的窗口系统有关,所以我尝试使用传统的QtWidgets,发现同样的结果那里。


更新

我跟踪了传统widget的鼠标事件,发现问题:双击事件由两个click事件(press-release-press-release)组成,当窗口状态changd(fullscreen to normal or normal to fullscreen) , 除非再点击一次,否则永远不会收到最后的 RELEASE 事件

我也做了更多的测试:用一个按钮来控制窗口状态,问题没有了,所以我可能认为这是鼠标事件句柄的错误。


顺便贴一下系统信息做一个note:

操作系统 10.10.1
Qt 5.4.1

最佳答案

此错误在 Qt 5.11 中仍然存在。我最终找到了解决方法。

未收到最后一个鼠标释放事件的原因是我们立即切换了全屏。不知何故,鼠标释放事件在过渡到全屏期间丢失了。

所以修复很简单:我们推迟切换全屏直到下一次鼠标释放事件。即,当我们需要切换全屏时,临时设置一个标志,然后在 mouseReleaseEvent 中检查该标志并进行真正的工作。

关于macos - QML Mac 全屏模式失去鼠标焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30187575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com