События мыши не обрабатываются в наследнике QQuickItem

Я хочу написать простое приложение Qt Quick с перетаскиваемым QQuickItems. Элементы хорошо перетаскиваются из-за встроенной в них MouseArea. Но проблема в том, что события мыши не запускаются в код C++ в виртуальных перегруженных функциях. Как решить эту проблему или, может быть, есть примеры, которые я не нашел?

Файл QML:

import QtQuick 2.0
import SimpleMaterial 1.0

Rectangle {
width: 320
height: 480
color: "black"

    SimpleMaterialItem {
        width: parent.width;
        height: parent.height / 3;
        color: "steelblue"
        MouseArea {
            anchors.fill: parent
            width: 64
            height: 64

            drag.target: parent
            drag.axis: Drag.XandYAxis
        }
    }
}

Класс C++:

class Item : public QQuickItem
{
    Q_OBJECT
    Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
public:
    Item()
    {
        setFlag(ItemHasContents, true);
        setFlag(ItemAcceptsDrops, true);
        setFlag(ItemAcceptsInputMethod, true);
        setAcceptedMouseButtons(Qt::AllButtons);
    }

    void mousePressEvent(QMouseEvent * event)
    {
        qDebug("Press");  // NOT CALLED!
    }

public:
    QSGNode *updatePaintNode(QSGNode *node, UpdatePaintNodeData *)
    {
    ...
    }
};

1 ответ

Решение

Если MouseArea обрабатывает событие мыши, оно не передает событие своему родителю.

Тебе нужно:

onPressed: {
    mouse.accepted = false;
}

в области мыши, чтобы позволить SimpleMaterialItem справиться onPressed событие.

Другие вопросы по тегам