Как переместить QGraphicsItem в другую сцену, не теряя захвата мыши?

У меня есть одна QGraphicsScene в качестве основной сцены с несколькими подвижными QGraphicsItem в ней и еще одна QGraphicsScene поверх основной сцены в качестве наложения. Сцена наложения имеет точно такой же размер, как и дисплей пользователя, тогда как основная сцена намного больше, поэтому ее необходимо автоматически прокручивать вверх и вниз.

Если элемент в основной сцене будет перемещен, я хочу удалить этот элемент из основной сцены и добавить его в сцену наложения, позволить пользователю перемещать элемент в сцене наложения, и как только мышь будет отпущена верните его на главную сцену. Это позволяет мне плавно автоматически прокручивать основную сцену, когда элемент приближается к краям экрана.

Проблема в следующем; когда элемент удаляется со сцены, он получает событие QMouseUngrab, поэтому невозможно продолжить перемещение элемента, не щелкнув его еще раз в сцене наложения. Я пытался предотвратить событие отмены захвата или создать поддельный QMousePress в оверлейной сцене, однако ни один из них не решил проблему.

У вас есть идея, как я могу начать перемещать элемент в одной сцене и продолжать перемещать его в другой сцене без перерыва?

Другими словами:

  1. QMousePress происходит в главной сцене
  2. Несколько QMouseMove и, наконец, QMouseRelease должны появиться в оверлейной сцене.
  3. Сразу после QMouseRelease предмет будет возвращен на главную сцену.

person alb    schedule 10.10.2010    source источник


Ответы (1)


Возможно, вам потребуется использовать систему перетаскивания. Вы можете начать системное перетаскивание, когда мышь покидает начальный холст, а затем, пока ваша сцена наложения принимает данные пантомимы, которые вы упаковали в свой QDrag, они могут взаимодействовать.

Это несколько разочаровывающая система, поскольку она обеспечивает функциональность с наименьшим общим знаменателем на всех платформах. Но это позволит вам общаться между двумя виджетами за одну операцию.

person simong    schedule 14.10.2011