有一个带有重载鼠标事件处理程序的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,才能使它向下传播。

10-07 12:30