Проблема с изменением положения мыши после увеличения - PullRequest
0 голосов
/ 11 июля 2019

Я реализую функцию привязки для своего приложения.

У меня есть QGraphicItem (ToSnap), который следует за моим курсором мыши, когда я перемещаю его в QGraphicView.

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

Я смог сделать это, переопределив событие перемещения мыши сцены, подав сигнал на вид, вкратце:

void SpecialGraphicScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    QGraphicsScene::mouseMoveEvent(event);
    //VIPs is the list of all the VeryImportantPoints 
    for (int kk = 0; kk < VIPs.size(); ++kk)
    {
       if (ToSnap->collidesWithItem(VIPs.at(kk)))
           {
               ActualVIP=VIPs.at(kk);
               ToSnap->setPos( ActualVIP->pos());
               QPoint point; 
               point.setX(ToSnap->pos().x()); 
               point.setY(ToSnap->pos().y());
               emit MousetoMove(point);
            }
      }
  }

Сигнал MousetoMove перехватывается следующим слотом в моей повторной реализации QGraphicView

void SpecialGraphicsView::MouseUpdate(QPoint myscenepoint)
{
    QPoint myglob=this->mapFromScene(myscenepoint);
    myglob=QWidget::mapToGlobal(myglob);
    QCursor::setPos(myglob);
}

Я сейчас реализую масштабирование с помощью wheelEvent.

Это работает нормально, когда я не увеличил изображение.

После масштабирования положение элемента ToSnap равноspot on VIP, вместо этого положение курсора мыши смещено относительно ToSnap и VIP.Знаете ли вы, как решить эту проблему?Я неправильно использую mapFromScene или mapToGlobal?

...