【问题标题】:Detect click outside QLineEdit检测 QLineEdit 之外的点击
【发布时间】:2023-03-02 23:20:01
【问题描述】:

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

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

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

  1. QLineEdit 在某些情况下会发送editingFinished() 信号(按 Enter,单击另一个小部件);
  2. 我还可以创建从QLineEdit 派生的新类,当focusOutEvent(QFocusEvent *) 发生时发送editingFinished() 信号。
  3. 在该课程中,我可以抓住 ESC 键并发送 editingFinished()

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

【问题讨论】:

    标签: c++ qt qt5 qlineedit


    【解决方案1】:

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

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

    Catching Qt modifier key releases

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 2014-09-29
      • 2023-03-10
      • 2015-01-13
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多