События мыши не обрабатываются в наследнике 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
событие.