2015-09-22 3 views
2

У меня есть родительский прямоугольник, над ним есть дочерний прямоугольник, оба прямоугольника с событиями мыши, но дочерний прямоугольник не принимает никакого события мыши, всегда обрабатывается родительский прямоугольник.Невозможно обработать дочерние прямые события мыши в QML

main.qml

import QtQuick 2.3 
import QtQuick.Controls 1.2 

ApplicationWindow { 
    visible: true 
    width: 500 
    height: 500 
    title: qsTr("Hello World") 
    Rectangle{ 
     id: outerrect 
     color: "green" 
     anchors.fill: parent 
     Rectangle{ 
      id: innerrect 
      width: 100 
      height: 100 
      color: "lightblue" 
      anchors.centerIn: parent 
      MouseArea{ 
       anchors.fill: parent 
       hoverEnabled: true 
       onClicked: { 
        console.log("child") 
       } 
      } 
     } 
     MouseArea{ 
      anchors.fill: parent 
      hoverEnabled: true 
      onClicked: { 
       console.log("parent") 
      } 
     } 
    } 
} 

Издание:

не в состоянии обрабатывать ребенка прямоугольник события мыши

ответ

1

Смотрите пример и объяснение для свойства propagateComposedEvents of MouseArea QML Type

Таким образом, если вы хотите обработать щелчок только дочерним прямоугольником, вы можете изменить порядок t он MouseArea блок в родительском и дочернем блоке Rectangle блок. Он изменяет порядок обработки событий по блокам.

Чтобы активировать оба обработчика верхнего объект должен иметь propagateComposedEvents: true собственностей, а также mouse.accepted = false должны быть установлен в onClicked обработчике, например:

MouseArea{ 
     anchors.fill: parent 
     propagateComposedEvents: true 
     hoverEnabled: true 
     onClicked: { 
      mouse.accepted = false 
      console.log("parent") 
     } 
    } 
Смежные вопросы