Обнаружение клика за пределами QLineEdit

Мой сложный графический интерфейс состоит из множества собственных и пользовательских виджетов. У большинства из них нет фокуса вообще (мне это не нужно: например, некоторые виджеты только для отображения, которые не требуют ввода пользователя).

Иногда QLineEdit появляется на экране, когда графический пользовательский интерфейс хочет, чтобы пользователь ввел некоторую строку (представьте проводник окна после нажатия F2, выбрав какой-то файл (переименуйте).

Я хочу, чтобы пользователь мог закрыть этот QLineEdit как можно больше способов: нажав Enter, ESC, щелкнув за пределами QLineEdit.

  1. QLineEdit отправляет сигнал editFinished () при некоторых обстоятельствах (нажмите Enter, нажмите на другой виджет);
  2. Также я могу сделать новый класс, производный от QLineEdit, который отправляет сигнал editFinished (), когда focusOutEvent (QFocusEvent *) происходит.
  3. В этом классе я могу поймать ESC-ключ и отправить editFinished ().

Единственная проблема заключается в том, что QLineEdit теряет фокус, только если какой-то другой виджет получает фокус. Поэтому, если вы щелкаете по виджету, который не заботится о фокусе, QLineEdit остается в фокусе и не отправляет сигнал editFinished ().

0

Решение

Вам, вероятно, понадобится установить фильтр событий для всего вашего приложения, который отправляет пользовательское событие всем вашим lineEdits когда щелчок мыши происходит. А потом в lineEditи реализовать QObject::event() для тебя lineEdit проверка класса для этого пользовательского события, если оно активно или имеет фокус.

Я написал ответ, который указывает на документацию по таким фильтрам:

Поймать освобождение ключа модификатора Qt

Надеюсь, это поможет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]