我正在使用MouseArea实现手势捕捉器(向左/向右滑动)。它应该在Flickable内部使用垂直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
我花了很多时间试图解决这个问题并且会感谢任何帮助。提前谢谢!
答案 0 :(得分:5)
我发现在MouseArea中跟随信号处理程序是一种解决方法,不要破坏我的代码:
onReleased: {
if (!propagateComposedEvents) {
propagateComposedEvents = true
}
}
propagateComposedEvents
应在声明(或省略)上设置为false
。
谢谢大家的努力!
答案 1 :(得分:1)
我找到了解决方法。希望它能满足您的需求(至少在提供更好的解决方案之前)。
这是您更新的代码:
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
} //window