Распространение событий MouseArea от родителя к потомку
У меня есть глобальный MouseArea
mouseAreaRoot берет весь экран, чтобы предотвратить действия с определенными кнопками при открытии всплывающего окна.
В пределах QML
объекты ниже этого глобального MouseArea
У меня есть вложенный MouseArea
nestedMenuMouseArea обрабатывает клики в моем меню.
Проблема в том, что когда я нажимаю на меню, события мыши перенаправляются на mouseAreaRoot
и не nestedMenuMouseArea
, Такое поведение можно ожидать, так как глобальный MouseArea
охватывает весь экран.
Я хотел бы исключить nestedMenuMouseArea из эффектов mouseAreaRoot, которое предотвращает любые действия на другом QML
объекты.
Я читал об атрибуте пропагата ComposedEvents, но, похоже, он работает только от дочернего к родительскому.
Я хотел бы наоборот: обнаружить от mouseAreaRoot щелчок на nestedMenuMouseArea и отправить ему событие, чтобы вызвать его onClicked
код.
1 ответ
Так как здесь нет кода, мы не можем найти визуальный порядок размещения.
Полное распространение событий в области мыши зависит от вашего визуального порядка размещения.
Если A - родительский элемент, B и C - дети A, D и E - дети C...
Что-то вроде:
A{
B{}
C{
D{}
E{}
}
}
Грубый визуальный порядок наложения (если значение Z не указано исключительно),
E D C B A.
Таким образом, распространение события в области мыши начинается с E и достигает A.
Если только некоторые области мыши enabled
свойство установлено исключительно в false.
Итак, первая и самая важная вещь, которую вы должны искать - это... Как устроены ваши родители-дети QML.
И затем проверить, если enabled
ложно для области мыши.
и далее, как "folibs" сказал в комментарии, убедитесь, что вы установили MouseEvent.accepted
ложь вместе с propagateComposedEvents: true