有一个带有重载鼠标事件处理程序的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
。您能解释一下为什么会发生吗?
最佳答案
MouseArea
只能是enabled: !mouseScaleButton.checked
。
另外,鼠标区域是否不应该位于菜单下方?这样,它将同时阻止绘图仪和菜单。
另外,仅因为设置了acceptedButtons: Qt.RightButton
并不一定意味着它将通过左键单击(我还没有测试过)。您可能必须同时启用这两个按钮并设置mouse.accepted = false
,才能使它向下传播。