如果我放置一个MouseAreaQML元素,那么MouseArea将窃取所有鼠标事件.因此,TextEdit将是不可编辑和不可选择的.
TextEdit {
// some properties
MouseArea {
// some properties
OnClicked: { /* do something */ }
}
}
Run Code Online (Sandbox Code Playgroud)
有办法解决吗?
顺便说一句,如果我把一个大的MouseArea放在另一个上MouseArea,更大的MouseArea将窃取所有鼠标事件.我该如何解决?我认为手动传递鼠标事件可以解决这个问题,但是怎么做呢?
szo*_*aki 22
您必须启用将MouseArea组合事件传播到clicked或下released传到组件,如@ Torgeirl的答案所述.
如果你想你的TextEdit,Slider或者CheckBox接收这些类型的事件,仅仅通过其设置通过事件accepted属性false.
示例代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
有一个属性propagateComposedEvents,允许MouseArea通过鼠标事件,如clicked().您必须event.accepted = false在事件处理程序中设置.
有关更多信息和示例,请参阅文档MouseArea和属性propagateComposedEvents.