2014-11-24 65 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

相关问题