Hello,

We are in a situation where we have one big MouseArea on top handling
click events and several smaller MouseAreas below handling
double-click events.

Unfortunately, there is currently no way in QML to say that an event
should "bubble" up or down to the next receiver. The top MouseArea
will always catch all events, and the MouseAreas below will get
nothing.

There is a very specific solution when the event you want to handle in
the topmost MouseArea is onDrag. In this case, you can use
drag.filterChildren: true to let the topmost MouseArea catch only drag
event and pass other events to MouseAreas beneath. But it won't work
for other events.

We devised a ugly hack to work around this, that basically involves
catching the event in the topmost MouseArea and manually calling the
event handler on any MouseArea underneath:

===============
import QtQuick 1.0

Rectangle {
        width: 360
        height: 360

        MouseArea {
                anchors {fill: parent; margins: 40}
                onClicked: console.log("hello from below");
        }

        MouseArea {
                id: mouseArea
                anchors.fill: parent

                onClicked: {
                        console.log("hello from top")
                        forwardEvent(mouse, "clicked");
                }

                function forwardEvent(event, eventType) {
                        mouseArea.visible = false
                        var item = parent.childAt(event.x, event.y)
                        mouseArea.visible = true
                        if (item && item != mouseArea && 
typeof(item[eventType]) == "function") {
                                item[eventType](event);
                        }
                }
        }
}
===============

What do you think? Are there any better solutions? Should this be a
built-in functionnality in QML so that we can avoid this hack,
especially the fact that we have to hide / show the element to get
elements below. Any feedback is appreciated.

Thanks,

Greg
_______________________________________________
Qt-qml mailing list
[email protected]
http://lists.qt.nokia.com/mailman/listinfo/qt-qml

Reply via email to