Распространение событий 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

Другие вопросы по тегам