检测QLineEdit外的点击



我的复杂GUI由许多本地和自定义小部件组成。他们中的大多数根本没有焦点(我不需要它:例如,一些只显示的小部件,不需要用户的输入)。

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

我希望用户能够关闭这个QLineEdit尽可能多的方式:按Enter, ESC,点击QLineEdit外。

  1. QLineEdit在某些情况下发送editingFinished()信号(按回车键,点击另一个小部件);
  2. 也可以从QLineEdit派生出新的类,当focusOutEvent(QFocusEvent *)发生时发送editingFinished()信号。
  3. 在该类中,我可以捕获ESC键并发送editingFinished()

唯一的问题是,QLineEdit只有在另一个小部件获得焦点时才会失去焦点。所以如果你点击一个不关心焦点的小部件,QLineEdit保持焦点,不发送editingFinished()信号。

你可能需要为你的整个应用程序安装一个事件过滤器,当鼠标点击发生时,它会向所有lineEdits发送一个自定义事件。然后在lineEdit中,并实现QObject::event()为您的lineEdit类检查自定义事件,如果它是活动的或有焦点。

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

捕捉Qt修饰符键释放

希望对你有帮助。

相关内容

  • 没有找到相关文章

最新更新