我有自己的类(MyGraphicsScene,MyGraphicsView,MyGraphicsItem)派生自QGraphicsScene,QGraphicsView和QGraphicsItem。
在我的主窗口中,我创建了九个(9)MyGraphicsScene实例,通过MyGraphicsView的九个实例显示。所有九个MyGraphicsScenes都包含彼此的指针。
如何在一个MyGraphicsScene中拖动MyGraphicsItem的实例,然后自动拖动某些MyGraphicsItem实例(在剩余的8个MyGraphicsScenes中)相同的数量/距离/向量?
我的第一个想法是重新实现MyGraphicsItem :: itemChange(使用change == QGraphicsItem :: ItemPositionChange),然后为MyGraphicsItem的其余实例(包含在其他MyGraphicsScenes中)调用setPos()。但是这不起作用,因为我会得到无限递归(setPos()也会触发itemChange(),包括原始的MyGraphicsItem)。
经验丰富的Qt-ers的其他想法?
答案 0 :(得分:1)
我知道您可以在多个视图中使用相同的QGraphicsScene
。因此,如果您只想尝试同一事物的多个视图,请使用相同的场景调用MyGraphicsView
。
答案 1 :(得分:0)
如果为QGraphicsItem定义派生类(我认为你已经拥有,对吧?)并重新实现mouseMoveEvent
,那么它会调用所有9个对象的move方法。
请记住,您可以使用QMouseEvent
的所有属性,例如buttons()
,pos()
。
void MyGraphicsItem::mouseMoveEvent( QMouseEvent *event )
{
if (event->buttons() & Qt::LeftButton) {
QPoint pos = event->pos();
// ...
}
}
希望有所帮助!