当QMenu关闭时,在Mac OS和Linux上发出的QEvent类型的差异

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (21)

我在我的应用程序中使用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关闭时,Mac环境中不会发出QEvent :: MouseButtonPress。我想知道它是Qt中的错误还是故意行为。

在我的代码中,我正在计算鼠标点击的坐标,当我关闭QMenu时,在mousePressEvent()方法中,我在我的自定义菜单类中覆盖了继承QMenu。但由于上面强调的原因,它打破了Mac OS上的整个应用程序。

我使用的是Qt版本5.12.3

提问于
用户回答回答于

这可能是因为在macOs上,菜单由操作系统处理。

这个功能暗示了这一点QMenu::toNSMenu()。不太适合您NSMenu似乎没有提供获得鼠标点击坐标的方法。

如果我建议您应该更改您的实现,而不是依赖任何平台上的MousePressEvent。QMenus可以使用键盘进行交互,在这种情况下,您将没有MousePressEvent,并且您将遇到相同的问题。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励