При взаимодействии пользователя с виджетом или его компонентами, необходимо перехватить событие и вызвать соответствующий ему метод обработки. Для установки слушателей используется два основных подхода:
Установка слушателя непосредственно элементу, генерирующему событие
Установка слушателя корневому элементу виджета с проверкой источника события
Решения не являются взаимоисключающими и могут использовать совместно, но следует помнить о необходимости отключения обработчиков при уничтожении виджета, для недопущения дублирования:
С использованием первого решения сделать это можно при декларативной реализации, путем отключения обработчиков на основе данных декларации:
При использовании второго решения, достаточно отключить обработчики, добавленные корневому элементу виджета:
Генерация событий
Помимо обработки событий пользователя, виджет может генерировать собственные события, облегчающие процесс коммуникации GUI. Генерируемые виджетом события можно разделить на две группы:
Глобальные событие, генерируемые корневым элементов виджета и доступные любой части GUI
Локальные события, генерируемые компонентами виджета и доступные только его контроллеру
Такое разделение позволяет строго ограничить область ответственности виджета и инкапсулировать логику реакции на события.
Глобальные события
Учитывая то, что глобальные события виджета генерируются его корневым элементом, не возникает необходимости использовать специальное пространство имен для имени события, так как достаточно имени класса корневого элемента, но это не запрещается:
Локальные события
Как и при генерации глобальных событий, можно использовать классификацию элемента виджета в качестве пространства имен события. Важно лишь помнить, что этот тип событий должны генерироваться и обрабатываться только к контексте родительского виджета. Более того, недопустимо обрабатывать локальные события виджетом, включающим данный виджет в качестве элемента.