Есть ли способ удалить eventfilter в qt?
Мне нужен фильтр событий только в течение некоторого времени, есть ли способ удалить его позже?
3 ответа
Пожалуйста, прочитайте о том, как система событий работает в Qt здесь. Это имеет решающее значение для базового понимания, особенно этот пункт:
Функция QObject::installEventFilter() включает это, устанавливая фильтр событий, заставляя назначенный объект фильтра получать события для целевого объекта в своей функции QObject::eventFilter(). Фильтр событий получает возможность обрабатывать события раньше, чем целевой объект, что позволяет ему проверять и отбрасывать события по мере необходимости. Существующий фильтр событий можно удалить с помощью функции QObject::removeEventFilter().
Прочитав это, вы можете увидеть, что есть противоположность installEventFilter
Не удивительно, это называется removeEventFilter
, Вот документация на Qt 5:
void QObject:: removeEventFilter (QObject * obj)
Удаляет объект фильтра событий obj из этого объекта. Запрос игнорируется, если такой фильтр событий не был установлен.
Все фильтры событий для этого объекта автоматически удаляются при уничтожении этого объекта.
Удалить фильтр событий всегда безопасно, даже при активации фильтра событий (т. Е. Из функции eventFilter ()).
Из Qt Docu:
void QObject:: removeEventFilter (QObject * obj)
Удаляет объект фильтра событий obj из этого объекта. Запрос игнорируется, если такой фильтр событий не был установлен.
Все фильтры событий для этого объекта автоматически удаляются при уничтожении этого объекта.
Удалить фильтр событий всегда безопасно, даже при активации фильтра событий (т. Е. Из функции eventFilter()).