How to check if the mouse has really left the QWidget?
考虑一个QWidget窗口,当鼠标离开该窗口时会触发什么事件?
该窗口上具有QLineEdit字段,并且它们具有用于输入建议的完成程序(QCompleter)。实际的目标是使这种(打开的)完成器在鼠标离开窗口时消失。这主要是因为在某些环境中,将鼠标移到其他窗口上可能会使其他窗口聚焦,但是键盘事件仍发送到QLineEdit字段(即使其父窗口不再聚焦),这令人困惑。
我可以实现QWidget :: leaveEvent(QEvent * event)(在窗口中),找到当前显示的完成程序弹出窗口并将其隐藏,从而关闭弹出窗口。但具有讽刺意味的是,当鼠标移到该弹出窗口上时,也会触发leaveEvent()-隐藏它(无法单击该弹出窗口中的项目)。我想这是有道理的,因为弹出窗口是一个不同的QWidget,即使该弹出窗口由窗口间接拥有。
那么,如何检查鼠标是否实际上已离开QWidget窗口?
在派生类中重新实现
如果没有,则不做任何事情返回。
这将过滤掉鼠标仍然停留在窗口小部件上的所有事件。
希望能帮助到你!