Flickable 内的 MouseArea 正在阻止它轻弹
MouseArea inside Flickable is preventing it from flicking
我正在使用 MouseArea 实现手势捕捉器(滑动 left/right)。它应该在具有垂直 flickableDirection 的 Flickable 内部工作。此外,它还应按视觉堆栈顺序将鼠标事件传播到其下方的其他元素。问题是 propagateComposedEvents 设置为 true 的子 mouseArea 在 exact one 单击之前阻止了任何父项的轻弹。第一次点击后,它工作正常。这是显示此内容的简化代码。
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
我花了很多时间试图解决这个问题,如果有任何帮助,我将不胜感激。提前致谢!
我几乎找不到解决方法。希望它能满足您的需求(至少在提供更好的解决方案之前)。
这是您更新后的代码:
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
我发现 MouseArea 中的以下信号处理程序是解决此问题的方法,请不要破坏我的代码:
onReleased: {
if (!propagateComposedEvents) {
propagateComposedEvents = true
}
}
propagateComposedEvents
应在声明中设置为 false
(或省略)。
感谢大家的付出!
我正在使用 MouseArea 实现手势捕捉器(滑动 left/right)。它应该在具有垂直 flickableDirection 的 Flickable 内部工作。此外,它还应按视觉堆栈顺序将鼠标事件传播到其下方的其他元素。问题是 propagateComposedEvents 设置为 true 的子 mouseArea 在 exact one 单击之前阻止了任何父项的轻弹。第一次点击后,它工作正常。这是显示此内容的简化代码。
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
我花了很多时间试图解决这个问题,如果有任何帮助,我将不胜感激。提前致谢!
我几乎找不到解决方法。希望它能满足您的需求(至少在提供更好的解决方案之前)。
这是您更新后的代码:
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
我发现 MouseArea 中的以下信号处理程序是解决此问题的方法,请不要破坏我的代码:
onReleased: {
if (!propagateComposedEvents) {
propagateComposedEvents = true
}
}
propagateComposedEvents
应在声明中设置为 false
(或省略)。
感谢大家的付出!