QTextEdit focusOut программно не работает

У меня есть обычай QTextEdit который переопределяет ::mouseMoveEvent(QMouseEvent *e) а также ::focusOutEvent(QFocusEvent *e), Контекст QTextEdit выбирается. В режим выбора, когда пользователь превышает границы QTextEdit я бы хотел остановить выбор программно сделав это в :: mouseMoveEvent:

if(e->pos().y() < 0)
{
QTextEdit::focusOutEvent(new QFocusEvent(QFocusEvent::FocusOut));
}

Я понял, что когда пользователь отпускает мышь, focusOutEvent вызывается немедленно.

Эта проблема: Хотя я вызываю focusOutEvent программно, focusOutEvent вообще не вызывается. Он вызывается только тогда, когда пользователь отпускает щелчок мышью. Я пытался также с mouseReleaseEvent, но это та же проблема.

Почему focusOutEvent не вызывается? Что можно сделать? А есть ли другое решение моей проблемы? Спасибо!

0

Решение

Вместо звонка:

 QTextEdit::focusOutEvent(new QFocusEvent(QFocusEvent::FocusOut));

Вы пытались вызвать:

clearFocus ();
0

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

Почему focusOutEvent не вызывается?

Поскольку Focus вызывается KeyPress.Eve, даже если вы вызываете FocusOutEvent вне указателя мыши, из-за факта существования keyPress, focusInEvent приходит снова немедленно.

В противном случае, когда вы попытались вызвать QFocusOutEvent, указатель мыши оказался вне диапазона, поэтому
if(e->pos().y() < 0) флаг не может быть проверен.

И MouseReleaseEvent был вызван на месте нового виджета, поэтому фокус был перенесен на виджет. Так что событие отпуска мыши могло сфокусироваться. Потому что mouseReleaseEvent это тип мышки

События фокуса отправляются виджетам при изменении фокуса ввода с клавиатуры. События фокуса происходят из-за действий мыши, нажатия клавиш (например, Tab или Backtab), оконной системы, всплывающих меню, сочетаний клавиш или других причин, связанных с конкретным приложением. Причина для конкретного события фокуса возвращается PySide.QtGui.QFocusEvent.reason () в соответствующем обработчике события.

Я рекомендую вам установить FocusPolicy или оставитьEvent (Когда вы выходите из QTextEdit, событие вызывается немедленно).

Этот тип перечисления определяет различные политики, которые может иметь виджет в отношении получения фокуса клавиатуры.
постоянная
Описание

Qt.TabFocus виджет принимает фокус путем табуляции.

Qt.ClickFocus виджет принимает фокус, нажав.

Qt.StrongFocus виджет принимает фокус как с помощью вкладок, так и щелчком. В Mac OS X это также будет означать, что виджет принимает фокус на вкладке, когда находится в «режиме фокусировки текста / списка».

Qt.WheelFocus, как Qt.StrongFocus, плюс виджет принимает фокус с помощью колесика мыши.

Qt.NoFocus виджет не принимает фокус.

Я думаю, что уйти из событий больше шансов.

Этот обработчик событий может быть переопределён в подклассе для получения событий выхода из виджета, которые передаются в параметре события.

Событие выхода отправляется виджету, когда курсор мыши покидает виджет.

QEvent.LeaveEditFocus может быть полезным

0

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