我正在为我的应用程序实现快照功能。
我有一个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);
}
}
}
在我重新实现QGraphicView时,以下插槽捕获了MousetoMove信号
void SpecialGraphicsView::MouseUpdate(QPoint myscenepoint)
{
QPoint myglob=this->mapFromScene(myscenepoint);
myglob=QWidget::mapToGlobal(myglob);
QCursor::setPos(myglob);
}
我现在正在用wheelEvent实现缩放。
当我没有放大视图时,效果很好。
缩放后,ToSnap项的位置位于VIP上,而不是将鼠标光标的位置相对于ToSnap和VIP进行移动。 您知道如何解决此问题吗?我是否使用了不正确的mapFromScene或mapToGlobal?