如果我放置一个MouseArea
QML元素,那么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
.