2013-07-30 20 views
12

Czy jest możliwe propagowanie zdarzenia positionChanged z MouseArea do obiektu podstawowego?QML - MouseArea - propagowanie naPositionChanged

Próbowałem ustawić mouse.accepted do false dla każdej istniejącej obsługi sygnału z górnym większości MouseArea jak również ustawienie propagateComposedEvents do true. Żadne z nich nie działało (chociaż nie jestem zaskoczony, że propagateComposedEvents nie działa, ponieważ dokumentacja mówi, że tylko przekaże takie zdarzenia, jak clicked, doubleClicked i pressAndHold).

+0

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

Odpowiedz

3

W zależności od struktury można zawsze ręcznie propagować zdarzenie, wywołując wywołanie funkcji onPositionChanged, podrzędneMouseArea.positionChanged (mysz) Powinno to ręcznie emitować sygnał w podstawowej myszy MouseArea. Moją jedyną obawą jest to, że może nie być w stanie przekazać w ten sposób obiektu MouseEvent (nigdy nie próbowałem z niczym innym niż ciągiem znaków). Jednak zawsze możesz wykonać tę instrukcję w C++, która zdecydowanie nie ucierpiałaby z powodu jakichkolwiek problemów z konwersją typów.

+0

Cóż, dodałem teraz właściwość do składnika głównego, który zawiera bieżącą pozycję myszy (ponieważ jest to jedyna informacja, którą obecnie zainteresowany). Pozycja get jest aktualizowana przez "MouseArea" składnika, jak również wszystkie obszary bazowe. Niezbyt ładne i nieco trudne do utrzymania (muszę pamiętać, aby zaktualizować tę wartość we wszystkich bazowych "Myszach" oddzielnie, jak już wspomniałeś), ale działa. –

1

ile trzeba obsługiwać zdarzenia zmiana pozycji z wielu obszarów myszy jednocześnie można spróbować reparent swoją górną powierzchnię myszy:

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'); 
     } 
    } 
} 

Jest unresolved bugreport.