2013-03-19 7 views
0

Мой сложный GUI состоит из множества собственных и пользовательских виджетов. Большинство из них вообще не имеют фокуса (мне это не нужно: например, некоторые виджеты только для отображения, которые не требуют ввода пользователя).Detect click outside QLineEdit

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

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

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

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

ответ

1

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

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

Catching Qt modifier key releases

Надежда, что помогает.