2013-07-30 7 views
12

Ist es möglich, das positionChanged-Ereignis MouseArea an ein zugrunde liegendes Ereignis weiterzugeben?QML - MouseArea - propagierend onPositionChanged

Ich habe versucht, die mouse.accepted-false für jedes vorhandene Signal-Handler der meisten Top-MouseArea sowie die Einstellung der propagateComposedEvents auf true einzustellen. Keine der beiden funktionierte (obwohl ich nicht überrascht bin, dass die propagateComposedEvents nicht funktioniert, da die Dokumentation sagt, dass es nur Ereignisse wie clicked, doubleClicked und pressAndHold weiterleitet).

+0

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

Antwort

3

Abhängig von Ihrer Struktur können Sie das Ereignis immer manuell weitergeben, indem Sie Ihre onPositionChanged-Prozedur aufrufen. BasedlyMouseArea.positionChanged (mouse) Dies sollte das Signal in der zugrunde liegenden MouseArea manuell ausgeben. Meine einzige Sorge ist, dass Sie möglicherweise ein MouseEvent-Objekt auf diese Weise nicht übergeben können (nie mit etwas anderem als einem String versucht). Sie können dieses Handbuch jedoch immer in C++ ausgeben, das nicht unter irgendwelchen Typkonvertierungsproblemen leidet.

+0

Nun, ich habe eine Eigenschaft zu der Root-Komponente hinzugefügt, die die aktuelle Mausposition enthält (da das die einzige Information ist, die ich zurzeit bin) interessiert an). Die Position wird durch die MouseArea der Komponente sowie alle darunter liegenden Bereiche aktualisiert. Nicht zu schön und ein bisschen schwer zu pflegen (ich muss daran denken, diesen Wert in allen zugrunde liegenden 'MouseArea's separat zu aktualisieren, wie du schon erwähnt hast), aber es funktioniert. –

1

Es sei denn, Sie brauchen, um Positionswechsel Ereignisse mit mehreren Mausbereiche behandeln gleichzeitig könnten Sie versuchen, Ihre Top-Maus Bereich Reparent:

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

Es ein unresolved bugreport ist.