The qml MouseArea has a property called propagateComposedEvents that allows composed mouse actions like clicks to be registered in multiple MouseAreas. The following Qml-file demostrates it's use. The example based on Qt Quick 2 Application template provided by Qt Creator 2.7, and run on Qt 5.0.2.
import QtQuick 2.0 Rectangle { width: 360 height: 360 Text { text: qsTr("Hello World") anchors.centerIn: parent } Rectangle { color: "blue" anchors.fill: parent MouseArea { id: blueMouseArea anchors.fill: parent hoverEnabled: true onClicked: console.log("Blue Clicked"); onPositionChanged: console.log("Blue Hovered"); } } Rectangle { color: "red" anchors.top: parent.verticalCenter anchors.bottom: parent.bottom anchors.left: parent.horizontalCenter anchors.right: parent.right MouseArea { id: redMouseArea hoverEnabled: true anchors.fill: parent // Set propagateComposedEvents to true, and "mouse.accepted" to false // if you want composed events to be propagated to other MouseAreas that are below, // in this case to blueMouseArea. Composed event consists of more // basic events. Eg. a click consists of a pressed and a released event propagateComposedEvents: true onClicked: { console.log("Red Clicked") // Setting "mouse.accepted" to false has to be also done // in order for the event to propagate mouse.accepted = false } // Trying desperately to get hover events to propagate to blueMouseArea. // The documentation says that the accepted property of the MouseEvent // parameter is ignored in "onPositionChanged"-handler. I'm not sure what // that means though... onPositionChanged: { console.log("Red Hovered"); mouse.accepted = false } } } }
In this example I also try to unsuccesfully propagate hovering. This may be impossible or then I'm just missing something...
Ei kommentteja:
Lähetä kommentti