2013-07-30 2 views
12

Возможно ли распространять событие positionOhanged MouseArea на базовое?QML - MouseArea - распространяющийся onPositionChanged

Я попытался установить mouse.accepted в false для любого существующего обработчика сигнала самой верхней MouseArea, а также установив propagateComposedEvents в true. Ни один из них не работал (хотя я не удивлен тем, что propagateComposedEvents не работает, поскольку в документации говорится, что он передает только события, такие как clicked, doubleClicked и pressAndHold).

+0

https://bugreports.qt-project.org/browse/QTBUG-37545 –

ответ

3

В зависимости от вашей структуры вы всегда можете вручную распространять событие, указав вызов обработчика onPositionChanged basicMouseArea.positionChanged (mouse). Это должно вручную излучать сигнал в базовой MouseArea. Моя единственная проблема заключается в том, что вы не сможете передать объект MouseEvent таким образом (никогда не пробовали ни с чем, кроме строки). Тем не менее, вы всегда можете выполнить это ручное испускание на C++, которое, безусловно, не пострадает от каких-либо проблем преобразования типов.

+0

Хорошо, теперь я добавил свойство корневому компоненту, который содержит текущую позицию мыши (так как это единственная информация, которую я сейчас увлекающийся). Позиция get обновляется компонентом 'MouseArea', а также всеми базовыми областями. Не слишком красиво и немного сложно поддерживать (я должен помнить об обновлении этой ценности во всех базовых 'MouseArea' отдельно, как вы уже упоминали), но это работает. –

1

Если вам не нужно обрабатывать событие изменения позиции с несколькими областями мыши одновременно вы могли бы попробовать ваш верхний изменит родитель область мыши:

import QtQuick 2.2 
import QtQuick.Layouts 1.1 

Rectangle { 
    id: __root 
    color: "lightgreen" 
    width: 360 
    height: 360 

    Rectangle { 
     id: rect2 
     width: 100; height: 100 
     color: "cyan" 
     MouseArea { 
      parent: __root // set 'logical' parent 
      anchors.fill: rect2 // set 'visual' ancestor 
      hoverEnabled: true 

      onPositionChanged: { 
       console.log('mouse area 2 onPositionChanged'); 
      } 
     } 
    } 


    MouseArea { 
     anchors.fill: parent 
     hoverEnabled: true 

     onPositionChanged: { 
      console.log('mouse area 1 onPositionChanged'); 
     } 
    } 
} 

Существует unresolved bugreport.

Смежные вопросы