Thanks Alan, Added a commentwith our use-case and workaround on this bug.
http://bugreports.qt.nokia.com/browse/QTBUG-13007?focusedCommentId=137123#comment-137123 On Mon, Jan 10, 2011 at 9:11 AM, Alan Alpert <[email protected]> wrote: > On Friday, January 07, 2011 08:54:33 pm ext Gregory Schlomoff wrote: >> > http://doc.qt.nokia.com/4.7-snapshot/qml-mouseevent.html#accepted-prop ? >> >> Yeah, you'd think that's what this property was made for. And you'd be >> wrong :) >> >> MouseEvent.accepted seems perfectly useless, but in very specific >> cases, like in onDoubleClicked. >> >> http://doc.qt.nokia.com/main-snapshot/qml-mousearea.html#onClicked-signal >> --> "The accepted property of the MouseEvent parameter is ignored in >> this handler." >> >> On Fri, Jan 7, 2011 at 5:50 PM, Juha Turunen <[email protected]> wrote: >> > http://doc.qt.nokia.com/4.7-snapshot/qml-mouseevent.html#accepted-prop ? >> > >> > On Fri, Jan 7, 2011 at 11:51 AM, Gregory Schlomoff >> > >> > <[email protected]> wrote: >> >> 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 > > Sounds like you want http://bugreports.qt.nokia.com/browse/QTBUG-13007 . > Currently scheduled for 4.8; you might want to watch or vote for that task, > and adding a comment with a concrete usecase is always helpful. > > -- > Alan Alpert > Software Engineer > Nokia, Qt Development Frameworks > _______________________________________________ > Qt-qml mailing list > [email protected] > http://lists.qt.nokia.com/mailman/listinfo/qt-qml > _______________________________________________ Qt-qml mailing list [email protected] http://lists.qt.nokia.com/mailman/listinfo/qt-qml
