2012-06-02 39 views
1

我從QGraphicsScene,和的QGraphicsView派生的QGraphicsItem我自己的類(MyGraphicsScene,MyGraphicsView,MyGraphicsItem)。拖動多個QGraphicsItems不同QGraphicsScenes相同金額

以我主窗口中,我然後創建MyGraphicsScene的九(9)的情況下,通過MyGraphicsView九個實例所示。所有九個MyGraphicsScenes都包含指向對方的指針。

如何在一個MyGraphicsScene中將MyGraphicsItem的實例拖動到一個MyGraphicsScene中,然後自動將相同數量/距離/矢量的某些MyGraphicsItem實例(在剩餘的八個MyGraphicsScenes中)拖動?

我的第一個想法是重新實現MyGraphicsItem :: itemChange(使用改變== QGraphicsItem :: ItemPositionChange),然後調用剩餘的MyGraphicsItem實例(包含在其他MyGraphicsScenes中)的setPos()。然而,這是行不通的,因爲我會得到無限的遞歸(setPos()也會觸發itemChange(),包括原始的MyGraphicsItem)。

從經驗豐富的Qt-ers的任何其他想法?

回答

0

如果你爲QGraphicsItem定義派生類(我認爲你已經擁有了,對嗎?)並重新實現mouseMoveEvent,因此它將移動方法調用到所有9個對象。

請記住,您在您的處置QMouseEvent所有屬性,例如buttons()pos()

void MyGraphicsItem::mouseMoveEvent(QMouseEvent *event) 
{ 
    if (event->buttons() & Qt::LeftButton) { 
    QPoint pos = event->pos(); 
    // ... 
    } 
} 

希望有所幫助!

1

我知道一個事實,您可以在多個視圖中使用相同的QGraphicsScene。所以,如果你只是想擁有同一場景的多個視圖,請撥打MyGraphicsView所有場景。

+0

這應該是被接受的答案。 –

相關問題