Как переместить QGraphicsItem в другую сцену, не теряя захват мыши? - PullRequest
1 голос
/ 10 октября 2010

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

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

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

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

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

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

1 Ответ

1 голос
/ 14 октября 2011

Что вам может понадобиться, это использовать drag & drop framework .Вы можете запустить системное перетаскивание, когда мышь покидает исходный холст, а затем, если ваша оверлейная сцена принимает данные MIME, которые вы упаковали в QDrag, они могут взаимодействовать.

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

...