0

我有一个继承自的类QGraphicItems和另一个继承自的类QGraphicsScene。我创建了一个自定义项目并将它们放置在我的自定义场景中。这是我的事件处理函数:

void Panel::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    if (mouseEvent->button() != Qt::LeftButton)
        return;
    //my code 

    QGraphicsScene::mousePressEvent(mouseEvent);
}

void Panel::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    //my code 

    QGraphicsScene::mouseMoveEvent(mouseEvent);
}

void Panel::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    //my code

    QGraphicsScene::mouseReleaseEvent(mouseEvent);
}

但是,这些事件似乎没有被调用。我的代码基于DiagramSceneQt 中的示例,主要区别在于我的项目继承自QGraphicsItem而不是QGraphicsPolygonItem.

我怎样才能正确处理这些事件?

4

1 回答 1

1

在您的实现中Panel::mousePressEvent(),您最终会QGraphicsScene::mousePressEvent()在您自己的代码处理完事件后调用。的默认实现QGraphicsScene::mousePressEvent()可能会撤消您在自己的代码中所做的事情。例如,默认实现QGraphicsScene::mousePressEvent()会将事件转发到接受鼠标事件的最顶层项目,项目将成为鼠标抓取器。如果您的代码期望发生其他一些事情,例如另一个对象应该是抓取器(无法从您发布的有限代码中看出),那么对基类的调用将撤消您所做的事情。

如果您希望自己以自定义方式处理事件,则不应调用基类的事件处理程序。

于 2013-01-04T20:15:00.947 回答