我正在开发一款应用程序,其菜单类似于适用于Android的Gmail / Inbox应用程序菜单。基本上,当您按下按钮打开菜单时,它会滑入视图。用户可以将其滑开或按菜单上的按钮。对于滑动,我使用kovrov中的代码SwipeArea
进行了一些小改动,以检查按下和释放之间的速度 - 如果它太慢,我就不会这样做认为这是一个轻扫。我还在MouseArea
上将propagate属性设置为true,即propagateComposedEvents: true
,并为点击的事件添加了此代码:
onClicked: {
mouse.accepted = false;
}
现在我有以下代码:
Button {
x: 10
y: 50
width: 200
onClicked: {
console.log("Button clicked!");
}
}
SwipeArea {
anchors.fill: parent
onMove: {
var newX = menu.x + x;
if(newX <= menu.maxX && newX >= menu.minX) menu.x = newX;
}
onSwipe: {
if(direction === "left" && timePassed <= menu.fastSwipe) root.hideMenu(menu.x, timePassed);
else {
var middle = menu.width/2;
var end = menu.x + menu.width;
if(end > middle) root.showMenu(menu.x);
else if(end <= middle) root.hideMenu(menu.x);
}
}
}
如果Button
呈现在最顶层(SwipeArea
下面的代码),它可以正常工作,但是滑动不会在Button
之上工作。
如果Button
替换为MouseArea
,则会正确触发事件。似乎事件没有被传播?有没有办法将事件传播到Button?或者我是否必须创建自己的按钮(例如Rectangle
MouseArea
)?
感谢您的时间。