我的复杂GUI包含许多本机和自定义小部件。他们中的大多数都根本不关注(我不需要它:例如,一些不需要用户输入的只显示小部件)。
当GUI希望用户输入一些字符串时,屏幕上会出现QLineEdit
(按F2后选择一些文件(重命名)后想象窗口的资源管理器。
我希望用户能够以尽可能多的方式关闭此QLineEdit
:按Enter,ESC,在QLineEdit外部单击。
QLineEdit
会发送editingFinished()
信号(按Enter,点击其他小部件); QLineEdit
的新类,该类在editingFinished()
发生时发送focusOutEvent(QFocusEvent *)
信号。editingFinished()
。唯一的问题是QLineEdit
只有在另一个小部件占据焦点时才会失去焦点。因此,如果您点击一个不关心焦点的小部件,QLineEdit
会保持专注,并且不会发送editingFinished()
信号。
答案 0 :(得分:1)
您可能需要为整个应用安装一个事件过滤器,当鼠标点击发生时,会向您的所有lineEdits
发送一个自定义事件。然后在lineEdit
中,为QObject::event()
类实施lineEdit
,检查该自定义事件是否处于活动状态或具有焦点。
我写了一个答案,指向这样的过滤器的文档:
Catching Qt modifier key releases
希望有所帮助。