选择和移动事件在QGraphicsScene中不起作用

时间:2013-01-04 19:55:53

标签: c++ qt events

我有一个继承自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);
}

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

如何正确处理事件?

1 个答案:

答案 0 :(得分:1)

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

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