【问题标题】:MouseArea steals QQuickItem's mouse eventsMouseArea 窃取 QQuickItem 的鼠标事件
【发布时间】:2018-04-07 11:51:19
【问题描述】:

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

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

【问题讨论】:

    标签: c++ qt qml qt-quick


    【解决方案1】:

    MouseArea 只能是 enabled: !mouseScaleButton.checked

    另外,鼠标区域不应该在菜单下方吗?这样它会同时阻止绘图仪和菜单。

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

    【讨论】:

      猜你喜欢
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      相关资源
      最近更新 更多