2

我有两个不同的类继承QGraphicsItem. 两者都有其特定的mousePressEvent功能。当这些项目在场景中重叠时,我只想执行其中一项mousePressEvent。我怎样才能做到这一点?

void PpiTargetItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) {
    mTargetColor = Qt::red;
    event->setAccepted(true);
}

// Bigger Item
void CriticalRegion::hoverEnterEvent(QGraphicsSceneHoverEvent *event) {
    LOGGER_START
    mCorners[0] = new CornerGrabber(this, 0);
    mCorners[1] = new CornerGrabber(this, 1);
    mCorners[2] = new CornerGrabber(this, 2);
    mCorners[3] = new CornerGrabber(this, 3);

    mCorners[0]->installSceneEventFilter(this);
    mCorners[1]->installSceneEventFilter(this);
    mCorners[2]->installSceneEventFilter(this);
    mCorners[3]->installSceneEventFilter(this);

    setCornerPositions();
    event->setAccepted(true);
    LOGGER_END
}
4

2 回答 2

1

当您从 QGraphicsItem 继承并实现该功能时

void QGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent * event)

当想要处理事件的对象已经完成时调用event->accept() 。如果这对您不起作用,请在您的问题中添加示例代码。

于 2013-09-17T12:53:32.180 回答
0

1- 设置 Grpahics 的 zValue 2- 通过调用接受事件:event- >accept()

并且不要像这样调用基类事件:

CriticalRegion::hoverEnterEvent(事件)

于 2020-07-08T12:04:31.303 回答