我有一个继承自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
。
如何正确处理事件?
答案 0 :(得分:1)
在Panel::mousePressEvent()
的实施中,在您自己的代码处理完事件后,您最终会调用QGraphicsScene::mousePressEvent()
。 QGraphicsScene::mousePressEvent()
的默认实现可能会撤消您在自己的代码中所做的事情。例如,QGraphicsScene::mousePressEvent()
的默认实现会将事件转发到接受鼠标事件的最顶层项目, 项将成为鼠标抓取器。如果你的代码期望发生其他一些事情,使得另一个对象应该是抓取器(无法通过你发布的有限代码告诉),那么对基类的调用将撤消你所做的事情。
如果您希望以自定义方式自己处理事件,则不应该调用基类的事件处理程序。