有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
。
你能解释一下它为什么会发生吗?
答案 0 :(得分:1)
MouseArea
应该只是enabled: !mouseScaleButton.checked
。
另外,鼠标区域不应低于菜单吗?这样它就会阻止绘图仪和菜单。
另外,仅仅因为你设置了acceptedButtons: Qt.RightButton
并不一定意味着它会通过左键点击(我没有测试过它)。您可能必须启用这两个按钮,并在左键单击时设置mouse.accepted = false
,以便可以向下传播。