Мой сложный графический интерфейс состоит из множества собственных и пользовательских виджетов. У большинства из них нет фокуса вообще (мне это не нужно: например, некоторые виджеты только для отображения, которые не требуют ввода пользователя).
Иногда QLineEdit появляется на экране, когда графический пользовательский интерфейс хочет, чтобы пользователь ввел некоторую строку (представьте проводник окна после нажатия F2, выбрав какой-то файл (переименуйте).
Я хочу, чтобы пользователь мог закрыть этот QLineEdit как можно больше способов: нажав Enter, ESC, щелкнув за пределами QLineEdit.
Единственная проблема заключается в том, что QLineEdit теряет фокус, только если какой-то другой виджет получает фокус. Поэтому, если вы щелкаете по виджету, который не заботится о фокусе, QLineEdit остается в фокусе и не отправляет сигнал editFinished ().
Вам, вероятно, понадобится установить фильтр событий для всего вашего приложения, который отправляет пользовательское событие всем вашим lineEdits
когда щелчок мыши происходит. А потом в lineEdit
и реализовать QObject::event()
для тебя lineEdit
проверка класса для этого пользовательского события, если оно активно или имеет фокус.
Я написал ответ, который указывает на документацию по таким фильтрам:
Поймать освобождение ключа модификатора Qt
Надеюсь, это поможет.
Других решений пока нет …