QGraphicsItem - следуйте за курсором мыши - PullRequest
3 голосов
/ 22 марта 2012

Я застрял на том, как подойти к этому.У меня есть QGraphicsItem внутри сцены, и я передаю событие hover со сцены этому ребенку.В то время как происходит событие перемещения (я просто использую mouseMoveEvent с отслеживанием мыши), я хочу, чтобы другой QGraphicsItem следовал за курсором.

Мне не нужно обнаруживать столкновения, перетаскивать и пр. Просто элемент, который следует за курсором.Единственное, о чем я могу думать, это ...

  1. Пока мышь движется, нарисуйте новый QGraphicsItem в позиции мыши.Мне нужно очистить сцену, перерисовать все и нарисовать новую позицию сверху.
  2. Каким-то образом используйте инфраструктуру анимации, и всякий раз, когда мышь перемещается, анимируйте QGraphicsItem, чтобы переместиться в новое положение мыши за 1 миллисекунду.другой способ сделать это ... какие-либо предложения?

1 Ответ

3 голосов
/ 22 марта 2012

Я сделал это так

  1. Создайте GraphicsItem cursor, который будет перемещаться с помощью курсора мыши, и сохраните его указатель где-нибудь (например, в подклассе сцены. У меня есть набор инструментов, поэтому для меня это один из этих инструментов)
  2. Установите его Z-значение (QGraphicsItem::setZValue) так, чтобы курсор был закрашен над всеми другими элементами в вашей сцене
  3. Отслеживание QGraphicsScene::mouseMoveEvent событий, пересылка этих событий вниз по указателю cursor и обновление позиции элемента

вот и все. Я думаю, это соответствует вашему решению 1, за исключением того, что вам не нужно очищать сцену благодаря функции z-значения.

...