我在应用程序中使用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中的错误还是故意的行为。
在我的代码中,我在mousePressEvent()方法中计算QMenu关闭时鼠标单击的坐标,我在继承QMenu的自定义菜单类中重写了这个方法。但由于上面强调的原因,它破坏了Mac OS上的整个应用程序。
我使用的是Qt版本5.12.3
发布于 2019-07-09 11:27:18
这可能是因为在macOs上,菜单是由操作系统处理的。
这是由QMenu::toNSMenu()
函数提示的。对你来说不太可能,NSMenu
似乎没有提供一种获得鼠标点击坐标的方法。
如果我可以建议你应该改变你的实现,并且不依赖于任何平台上的MousePressEvent。可以使用键盘与QMenus
进行交互,在这种情况下,您将不会有MousePressEvent,您也会遇到同样的问题。
https://stackoverflow.com/questions/56940933
复制相似问题