2016-08-19 2 views
0

Ich möchte ein QML-Element erstellen, das verschwindet, wenn sich die Maus außerhalb davon bewegt. Hier ist mein Code:Abfangen von Mausereignissen von QML

Item { 
    id: disappearing_element 

    ListView { ... } 

    MouseArea { 
    id: collapser 
    anchors.fill: parent 
    propagateComposedEvents: true 
    hoverEnabled: true 

    onExited: { 
     disappearing_element.visible = false 
    } 
    } 
} 

Es funktioniert gut, aber MouseArea breitet sich Ereignisse wie onClicked()onDoubleClicked() nur (wie gesagt in Qt-Dokumentation).

Gibt es eine Möglichkeit, disappearing_element 's Kinder über Mauseingabe und Mausausgangsereignisse zu benachrichtigen (ohne ein Popup Element zu verwenden)?

+0

Sie können 'disappearing_element.visible' für Benachrichtigungen an die Kinder verwenden, indem Sie an sie binden, d. H.' Property bool someProp: parent.visible; onSomePropChanged: {... deine Sachen ...} ' – dtech

+0

Du verstehst mich falsch. Ich möchte MouseEvent an die Kinder von 'displayning_element' weiterleiten, um zu prüfen, ob einer von ihnen Mauszeiger enthält oder nicht. –

+0

Haben Sie versucht, die 'Item itemAt (int x, int y)' Funktion von 'ListView' zu verwenden? – dtech

Antwort

0

Ich denke, das ist eine der häufigsten Anforderungen bei der Entwicklung von QtQuick-Apps. Eine Lösung, die wir derzeit häufig verwenden, ist das Hinzufügen von MouseArea in jedem der untergeordneten Objekte, die die Einschließung der Maus überprüfen müssen, und das Emittieren von Signalen (und Erfassen dieser Signale in Ihrem Hauptobjekt), wenn die Maus ein- oder austritt.

Dinge gehen ein bisschen kompliziert, wenn die Kinder Elemente auch solche Mechanismen benötigen, um ihre Kinder zu verwalten. Für den allgemeinen Gebrauch reicht diese Vorgehensweise jedoch gerade jetzt aus.