MouseArea stole QML element's mouse events
You have to enable the MouseArea
to propagate the composed events like clicked
or released
to the underneath component, as described by @Torgeirl's answer.
If you want your TextEdit
, Slider
or CheckBox
to receive these kind of events, simply pass through the event by setting its accepted
property to false
.
Sample code:
RowLayout {
TextEdit { text: "Hi" }
Slider {}
CheckBox { text: "CheckBox"}
MouseArea {
anchors.fill: parent
propagateComposedEvents: true
onClicked: mouse.accepted = false;
onPressed: mouse.accepted = false;
onReleased: mouse.accepted = false;
onDoubleClicked: mouse.accepted = false;
onPositionChanged: mouse.accepted = false;
onPressAndHold: mouse.accepted = false;
}
}
There is the property propagateComposedEvents
which allows a MouseArea
to let through mouse events such as clicked()
.
You have to set event.accepted = false
in the event handler.
Please, see the documentation for MouseArea
and the property propagateComposedEvents
for more information and example.
You can try something like this for your particular case:
Rectangle
{
MouseArea
{
id: mouseAreaTop
anchors.fill: parent
OnClicked: { /* do something */ }
}
TextEdit
{
/* Do whatever */
}
}
Note that I have arranged these in an order. All children will have higher z than parent. Siblings coming later in the tree for a parent, have higher z values.
General idea is like this :
- Define all the mouse areas
- Arrange them on the z values
Read about z property here in the Qt documentation, you will be able to understand how to arrange the mouse areas.
eg:
Parent
{
anchors.fill: parent
child1
{
anchors.fill: parent
z: 2
}
child2
{
anchors.fill: parent
z: 1
}
child3
{
anchors.fill: parent
z: 4
}
child4
{
anchors.fill: parent
z: 3
}
}
In this example i have overridden the natural ordering by assigning the z values myself.