Qt 如何检查鼠标是否真的离开了QWidget?
考虑一个QWidget窗口,当鼠标离开该窗口时会触发什么事件 窗口上有QLineEdit字段,它们有用于输入建议的补全符(QCompleter)。实际的目标是当鼠标离开窗口时,使这样一个(打开的)完成符消失。这主要是因为在某些环境中,将鼠标移到另一个窗口上可能会聚焦到另一个窗口,但键盘事件仍会发送到QLineEdit字段(即使其父窗口不再聚焦),这令人困惑 我可以实现QWidget::leaveEvent(QEvent*事件)(在窗口中),找到当前显示的完成器弹出窗口并隐藏它,从而关闭弹出窗口。但具有讽刺意味的是,当鼠标移动到弹出窗口上时,也会触发leaveEvent(),从而隐藏它(使得无法单击该弹出窗口中的项目)。我想这是有道理的,因为弹出窗口是一个不同的QWidget,即使弹出窗口是由窗口间接拥有的Qt 如何检查鼠标是否真的离开了QWidget?,qt,focus,mouseevent,qwidget,Qt,Focus,Mouseevent,Qwidget,考虑一个QWidget窗口,当鼠标离开该窗口时会触发什么事件 窗口上有QLineEdit字段,它们有用于输入建议的补全符(QCompleter)。实际的目标是当鼠标离开窗口时,使这样一个(打开的)完成符消失。这主要是因为在某些环境中,将鼠标移到另一个窗口上可能会聚焦到另一个窗口,但键盘事件仍会发送到QLineEdit字段(即使其父窗口不再聚焦),这令人困惑 我可以实现QWidget::leaveEvent(QEvent*事件)(在窗口中),找到当前显示的完成器弹出窗口并隐藏它,从而关闭弹出窗口。
那么,如何检查鼠标是否确实离开了QWidget窗口呢?在派生类中重新实现
QWidget::leaveEvent(QEvent*event)
,但首先检查rect().contains(mapFromGlobal(QCursor::pos())
是否为真
如果没有,则不做任何事情就返回。
这将过滤掉鼠标仍在小部件上的所有事件
希望有帮助
leaveEvent
不是信号,也许你想在leaveEvent
中实现或调用检查功能?哦,你说得对,不确定我脑子里在想什么。是的,所以在重新实现leaveEvent的开始,基本上过滤掉对leaveEvent的回调,然后清理弹出窗口。