MouseArea 窃取 QQuickItem 的鼠标事件
Posted
技术标签:
【中文标题】MouseArea 窃取 QQuickItem 的鼠标事件【英文标题】:MouseArea steals QQuickItem's mouse events 【发布时间】:2018-04-07 11:51:19 【问题描述】:有一个QQuickPaintedItem
带有重载的鼠标事件处理程序:
void Plotter::mousePressEvent(QMouseEvent *event)
qDebug() << "mousePressEvent";
void Plotter::mouseMoveEvent(QMouseEvent* event)
qDebug() << "mouseMoveEvent";
void Plotter::hoverMoveEvent(QHoverEvent *event)
qDebug() << "hoverMoveEvent";
我想在 QML 代码中为这个 QQuickPaintedItem 添加一个上下文菜单,所以我必须将 MouseArea 添加到这个元素中:
Plotter
id: plotter
// ...
Menu
id: contextMenu
MenuItem text: "Добавить маркер"
MenuItem text: "Удалить маркер"
MenuItem text: "Удалить все маркеры"
MenuItem text: "Установить шаг"
MouseArea
anchors.fill: parent
acceptedButtons: Qt.RightButton
propagateComposedEvents: true
onClicked:
if (!mouseScaleButton.checked)
contextMenu.popup();
else
mouse.accepted = false;
但如果我按下右键,它不会捕捉到 QQuickPaintedItem 的 mousePressEvent
。
你能解释一下为什么会这样吗?
【问题讨论】:
【参考方案1】:MouseArea
只能是 enabled: !mouseScaleButton.checked
。
另外,鼠标区域不应该在菜单下方吗?这样它会同时阻止绘图仪和菜单。
另外,仅仅因为您设置了acceptedButtons: Qt.RightButton
并不一定意味着它会通过左键单击(我还没有测试过)。您可能必须启用这两个按钮并设置mouse.accepted = false
以防左键单击,以便向下传播。
【讨论】:
以上是关于MouseArea 窃取 QQuickItem 的鼠标事件的主要内容,如果未能解决你的问题,请参考以下文章
Qml 错误:无法将 QObject* 分配给 QQuickItem