C++ Qt C++;让多个QGraphicsItem处理一个鼠标事件

C++ Qt C++;让多个QGraphicsItem处理一个鼠标事件,c++,qt,user-interface,qgraphicsitem,C++,Qt,User Interface,Qgraphicsitem,我已经创建了一个实现QGraphicsItem的对象图表块。我的目标是创建这些对象的网格,当按下(并按住)鼠标按钮并在每个块上移动时,在光标进入的每个块上执行一些操作 由于QGraphicsItem在其内部单击时会捕获鼠标事件,因此mouseMoveEvent不会触发其他项目。然后,我基于QGraphicsSiteMgroup创建了一个对象来处理所有鼠标事件,但是我需要某种方法将MousePresseEvent/mouseReleaseEvent以及mouseMoveEvent传递给光标所在的每

我已经创建了一个实现QGraphicsItem的对象图表块。我的目标是创建这些对象的网格,当按下(并按住)鼠标按钮并在每个块上移动时,在光标进入的每个块上执行一些操作

由于QGraphicsItem在其内部单击时会捕获鼠标事件,因此mouseMoveEvent不会触发其他项目。然后,我基于QGraphicsSiteMgroup创建了一个对象来处理所有鼠标事件,但是我需要某种方法将MousePresseEvent/mouseReleaseEvent以及mouseMoveEvent传递给光标所在的每个子级

我是不是想得太多了?看起来创建这样一个简单的操作应该不那么困难,但是由于QGraphicsSitems本身就控制着鼠标事件,我不知道如何绕过它。我读过类似的情况,但似乎没有什么能给出一个直截了当的答案


编辑:我想这样做的一种方法是跟踪我在数组中创建的每个QGraphicsSitem的坐标/大小,然后获取光标在组mouseMoveEvent中的位置,并查看是否有点击..

我能够收集一些类似的答案来创建一个解决方案;我放弃了将所有QGraphicItem放在一个组中的想法,直接将它们放在场景中。通过抓取所有鼠标事件的场景,我进行了mouseMoveEvent检查,以查看当前位置是否位于QGraphicsItem的顶部-如果是,请执行一些操作

我仍然需要尝试让itemAt()为实现QGraphicsItem的我自己的类工作,因为itemAt只返回QGraphicsItem的,但我相信一些cast应该可以让它工作

void ChartScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    QPointF mousePosition = event->scenePos();
    QGraphicsItem* pItem = this->itemAt(mousePosition.x(), mousePosition.y());
}

这似乎正是我想要做的,但没有提到真正的解决方案。关于您答案中的问题:
itemAt()
返回一个QGraphicsItem,您可以在其上调用type(),这是一个虚拟函数,您可以在派生类中重写,并返回一个指示类类型的自定义值。