首页 文章

MouseArea窃取了QQuickItem的鼠标事件

提问于
浏览
1

有一个 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;

        }

    }
}

但如果我按下右键,它就不会't catch the QQuickPaintedItem' s mousePressEvent .

你能解释一下为什么会这样吗?

1 回答

  • 1

    MouseArea 应该只是 enabled: !mouseScaleButton.checked .

    此外,鼠标区域不应低于菜单吗?这样它就会阻止绘图仪和菜单 .

    另外,只是因为你已经设置了 acceptedButtons: Qt.RightButton 并且没有测试过它 . 您可能必须启用这两个按钮并在左键单击时设置 mouse.accepted = false ,以便可以向下传播 .

相关问题