Я реализую функцию привязки для своего приложения.
У меня есть 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?