MouseArea窃取了QQuickItem的鼠标事件

时间:2018-04-07 11:51:20

标签: c++ qt qml qt-quick

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 个答案:

答案 0 :(得分:1)

MouseArea应该只是enabled: !mouseScaleButton.checked

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

另外,仅仅因为你设置了acceptedButtons: Qt.RightButton并不一定意味着它会通过左键点击(我没有测试过它)。您可能必须启用这两个按钮,并在左键单击时设置mouse.accepted = false,以便可以向下传播。