检测QLineEdit外部的点击

时间:2013-03-19 21:14:08

标签: c++ qt qt5 qlineedit

我的复杂GUI包含许多本机和自定义小部件。他们中的大多数都根本不关注(我不需要它:例如,一些不需要用户输入的只显示小部件)。

当GUI希望用户输入一些字符串时,屏幕上会出现QLineEdit(按F2后选择一些文件(重命名)后想象窗口的资源管理器。

我希望用户能够以尽可能多的方式关闭此QLineEdit:按Enter,ESC,在QLineEdit外部单击。

    在某些情况下,
  1. QLineEdit会发送editingFinished()信号(按Enter,点击其他小部件);
  2. 此外,我可以制作源自QLineEdit的新类,该类在editingFinished()发生时发送focusOutEvent(QFocusEvent *)信号。
  3. 在该课程中,我可以抓住ESC键并发送editingFinished()
  4. 唯一的问题是QLineEdit只有在另一个小部件占据焦点时才会失去焦点。因此,如果您点击一个不关心焦点的小部件,QLineEdit会保持专注,并且不会发送editingFinished()信号。

1 个答案:

答案 0 :(得分:1)

您可能需要为整个应用安装一个事件过滤器,当鼠标点击发生时,会向您的所有lineEdits发送一个自定义事件。然后在lineEdit中,为QObject::event()类实施lineEdit,检查该自定义事件是否处于活动状态或具有焦点。

我写了一个答案,指向这样的过滤器的文档:

Catching Qt modifier key releases

希望有所帮助。