2014-11-24 152 views
0

我有我的自定義GraphicsScene數的QGraphicsItem對象。它們具有不同的自定義類型,因此其中一些必須以一種方式處理MouseMove事件,而其他方式則以不同方式處理。 當我選擇他們中的一些,然後移動選定項目僅是鼠標光標下的項目接收MouseMove事件,但其他項目不。移動開始時,我必須在MyCustomItemClass :: mouseMoveEvent中做一些額外的操作。 那麼爲什麼其他項目不會收到事件?爲什麼所有選定的QGraphicsItem沒有收到mouseMove事件?

回答

0

從你的描述,我不會在MyCustomItemClass::mouseMoveEvent因爲當對特定項目的頂部的鼠標移動,你已經說過這只是執行處理這些動作。

相反,我會在scene中對mouseMoveEvent進行分類,以檢查哪些項目被選中並在這些項目中執行相關的方法。當然,您必須小心謹慎,以便根據相對鼠標移動將它們移動到原始位置。

+0

但是對於那些坐落在現場我有移動開始時執行不同的操作不同類別的項目。而這些類可能沒有共同的基類。檢查場景中項目類型的方法並不好,因爲我們必須將場景上的項目投射到特定的類類型。我該如何處理? – vasyl 2014-11-24 15:28:54

+0

鑄造有什麼問題?你有多少個不同的課程,這是太多的努力? – Bowdzone 2014-11-24 20:46:40

+0

即使有四種不同的類別,鑄造是不是最好的解決方案,因爲巨大的if-else序列。 – vasyl 2014-11-25 14:15:45

0

如果您想要選擇一組項目,然後一次全部移動它們,您可以在選擇期間將它們添加到QGraphicsItemGroup,然後將該組作爲單個對象移動,這將移動組中的所有項目。

+0

但是我也需要分別執行組中任何項目的移動。 QGraphicsItemGroup不提供這種可能性 - 在從組中移動某個項目時,所有分組項目始終會隨此項目一起移動。 – vasyl 2014-11-24 15:34:38

+0

如果選擇多個項目,請添加到組並移動。取消選擇時,從組中刪除項目。 – TheDarkKnight 2014-11-24 15:49:50

相關問題