У меня есть QPlainTextEdit и вы хотите обработать контент, когда он теряет фокус. Я видел, что могу либо сделать это с помощью события focusChanged, либо с помощью виртуальной функции focusOutEvent.Как перехватить, когда виджет теряет фокус
Я не знаю, как передать параметры с новым синтаксисом (то есть my_app.focusChanged.connect(my_handler)
, где my_handler
- локально определенная функция). Поэтому я попытался работать с виртуальной функцией.
Поскольку интерфейс создан с помощью QT Designer, наследующего QPlainTextEdit
, это будет излишним, поэтому я попытался переопределить виртуальную функцию, просто используя my_text_edit.focusOutEvent = my_handler
. Это перехватило сообщение так, как я хотел, но он, по-видимому, перезаписал некоторые встроенные функции в QPlainTextEdit
, и я получаю артефакты, а именно, курсор из текстового редактирования не исчезает, когда он теряет фокус. Я понял, что я должен как-то называть оригинальное событие и то, что работал для меня было следующее:
В моем __init__
метод у меня есть:
self.original_handler = self.my_text_edit.focusOutEvent
self.my_text_edit.focusOutEvent = self.my_handler
Определение my_handler
является:
def my_handler(self, event):
self.original_handler(event)
# my own handling follows...
Я в основном реплицирую то, что я ожидаю от библиотеки для меня. Я нахожу это слишком неуклюжим, и я вижу, как во время технического обслуживания он может иметь неприятные последствия. Может ли кто-нибудь предложить более аккуратный способ сделать это? Благодаря!
Так я это делаю, поэтому меня тоже интересуют любые ответы. – ballsatballsdotballs