linux - 关闭 QMenu 时在 Mac OS 和 Linux 上发出的 QEvent 类型的差异
问题描述
我在我的应用程序中使用 QMenu,当我在 QMenu 外部单击以关闭它时,Qt 会发出几个事件。我发现在 Linux 上,它会发出以下事件:
QEvent::MouseButtonPress
QEvent::Close
QEvent::Hide
QEvent::HideToParent
QEvent::UpdateRequest
QEvent::Leave
在 Mac OS 上,发出的事件如下:
QEvent::Close
QEvent::Hide
QEvent::HideToParent
QEvent::UpdateRequest
QEvent::Leave
可以看出,当 QMenu 关闭时,QEvent::MouseButtonPress 不会在 Mac 环境中发出。我想知道这是 Qt 中的错误还是故意行为。
在我的代码中,我正在计算关闭 QMenu 时鼠标单击的坐标,在 mousePressEvent() 方法中,我在继承 QMenu 的自定义菜单类中覆盖了该方法。但由于上面强调的原因,它正在破坏 Mac OS 上的整个应用程序。
我正在使用Qt 版本 5.12.3
解决方案
这可能是由于在 macOS 上,菜单由操作系统处理。
函数暗示了这一点QMenu::toNSMenu()
。您NSMenu
似乎不太可能提供一种获取鼠标单击坐标的方法。
如果我建议您更改您的实现,而不是依赖于任何平台上的 MousePressEvent。QMenus
可以使用键盘进行交互,在这种情况下,您将没有 MousePressEvent 并且您将遇到同样的问题。
推荐阅读
- c# - Hangfire商店如何回电?
- java - 如何在 JDI 测试框架中定义自己的复杂 WebElement
- python - Python - itertools groupby 但仅在新列表中包含组。然后过滤列表?
- clojure - 如何从 java-time 库中解构瞬间并提取年、月等
- javascript - modelbinder IsMultiPartContent 始终返回 false。如何使用反应上传文件
- javascript - 如何在新会议上从插件“模拟”发送按钮?
- phantomjs - phantomjs 错误地将日期解析为 1400 年 3 月之前的日期,为什么?
- postgresql - Osmosis 抛出奇怪的 Java 错误
- cloud-foundry - 如何在 Windows 中查看 PCF .droplet 文件的内容?
- apache-kafka - 如何通过kafka客户端查看集群中运行的kafka服务器的数量和IP?