【发布时间】:2015-01-18 21:52:28
【问题描述】:
考虑一个QWidget窗口,当鼠标离开这个窗口时会触发什么事件?
该窗口上有 QLineEdit 字段,并且它们具有用于输入建议的完成程序 (QCompleter)。实际目标是在鼠标离开窗口时使这样的(打开的)完成程序消失。这主要是因为在某些环境中,将鼠标移到不同的窗口上可能会聚焦到另一个窗口,但键盘事件仍会发送到 QLineEdit 字段(即使其父窗口不再聚焦),这会造成混淆。
我可以实现 QWidget::leaveEvent(QEvent *event) (在窗口中),找到当前显示的完成弹出窗口并将其隐藏,关闭弹出窗口。但具有讽刺意味的是,当鼠标移到该弹出窗口上时也会触发 leaveEvent() - 隐藏它(使其无法单击该弹出窗口中的项目)。我想这是有道理的,因为弹出窗口是不同的 QWidget,即使弹出窗口间接地归窗口所有。
那么如何检查鼠标是否真的离开了 QWidget 窗口呢?
【问题讨论】:
标签: qt focus mouseevent qwidget