0

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

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

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

  1. QLineEdit在某些情况下发送editingFinished()信号(按 Enter,单击另一个小部件);
  2. 我也可以制作派生自该类的新类,该类在发生时QLineEdit发送editingFinished()信号focusOutEvent(QFocusEvent *)
  3. 在该课程中,我可以捕获 ESC 键并发送editingFinished().

唯一的问题是QLineEdit只有当另一个小部件获得焦点时才会失去焦点。因此,如果您单击不关心焦点的小部件,则QLineEdit保持焦点并且不发送editingFinished()信号。

4

1 回答 1

1

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

我写了一个答案,指向过滤器的文档,如下所示:

捕捉 Qt 修饰键释放

希望有帮助。

于 2013-03-20T01:17:40.683 回答