我的复杂GUI由许多本地和自定义小部件组成。他们中的大多数根本没有焦点(我不需要它:例如,一些只显示的小部件,不需要用户的输入)。
有时QLineEdit
出现在屏幕上,当GUI希望用户输入一些字符串(想象窗口的资源管理器按下F2后有一些文件选择(重命名)。
我希望用户能够关闭这个QLineEdit
尽可能多的方式:按Enter, ESC,点击QLineEdit外。
-
QLineEdit
在某些情况下发送editingFinished()
信号(按回车键,点击另一个小部件); - 也可以从
QLineEdit
派生出新的类,当focusOutEvent(QFocusEvent *)
发生时发送editingFinished()
信号。 - 在该类中,我可以捕获ESC键并发送
editingFinished()
。
唯一的问题是,QLineEdit
只有在另一个小部件获得焦点时才会失去焦点。所以如果你点击一个不关心焦点的小部件,QLineEdit
保持焦点,不发送editingFinished()
信号。
你可能需要为你的整个应用程序安装一个事件过滤器,当鼠标点击发生时,它会向所有lineEdits
发送一个自定义事件。然后在lineEdit
中,并实现QObject::event()
为您的lineEdit
类检查自定义事件,如果它是活动的或有焦点。
我写了一个答案,指向像这样的过滤器的文档:
捕捉Qt修饰符键释放
希望对你有帮助。