我正在用MouseArea实现手势捕捉器(左/右滑动)。它应该可以在垂直flickableDirection闪烁的内部工作。此外,它还应该以可视堆栈顺序将鼠标事件传播到它下面的其他元素。问题是,propagateComposedEvents设置为true的子mouseArea在精确单击之前阻止了任何父级的电影。在进行第一次单击之后,它就正常工作了。下面是显示这一点的简化代码。
import QtQuick 2.4
import QtQuick.Window 2.2
Window {
id: __root
visible: true
width: 460; height: 640
Flickable {
id: mainFlickable
width: parent.width
height: parent.height
contentHeight: column.height
flickableDirection: Flickable.VerticalFlick
MouseArea {
anchors.fill: parent
propagateComposedEvents: true
z: 1
}
Column {
id: column
width: parent.width
Repeater {
model: 5
Rectangle {
width: __root.width
height: 200
color: "yellow"
border.width: 2
MouseArea {
anchors.fill: parent
onClicked: {
console.log("clicked")
}
}
}
} //repeater
} //column
} //flickable
} //window我花了相当长的时间来修复这个问题,我会感谢你的帮助。提前感谢!
发布于 2015-03-24 20:13:41
我发现MouseArea中的信号处理程序是解决这一问题的方法,不要破坏我的代码:
onReleased: {
if (!propagateComposedEvents) {
propagateComposedEvents = true
}
}在声明中,propagateComposedEvents应该设置为false (或ommited)。
感谢大家的努力!
发布于 2015-03-24 18:44:46
我找不到什么解决办法。希望它能满足你的需求(至少在提供更好的解决方案之前)。
以下是您更新的代码:
import QtQuick 2.4
import QtQuick.Window 2.2
Window {
id: __root
visible: true
width: 460; height: 640
Flickable {
id: mainFlickable
width: parent.width
height: parent.height
contentHeight: column.height
flickableDirection: Flickable.VerticalFlick
onDragStarted: ma.enabled = false
onDragEnded: ma.enabled = true
MouseArea {
id: ma
anchors.fill: parent
enabled: false
propagateComposedEvents: true
z: 100
onClicked: {
print("CLICKED ON UPPER")
mouse.accepted = false
}
}
Column {
id: column
width: parent.width
Repeater {
model: 5
Rectangle {
width: __root.width
height: 200
color: "yellow"
border.width: 2
MouseArea {
anchors.fill: parent
onClicked: console.log("clicked on child")
}
}
} //repeater
} //column
} //flickable
} //windowhttps://stackoverflow.com/questions/29236762
复制相似问题