Qt相对于鼠标点旋转/移动自定义项目

时间:2014-05-06 09:52:28

标签: c++ qt rotation qgraphicsitem

我正在尝试按鼠标位置旋转QGraphicsItem。所以在我的Dialog.cpp中,只要鼠标位置发生变化,我就会调用此函数:

void Dialog::rotating()
{
    QPointF local = ui->graphicsView->mapToScene( ui->graphicsView->mouse );
        Player->rotate(local.x(),local.y());
}

ui->graphicsView->setScene(scene);

scene->addItem(Player);

在构造函数中。

调用旋转功能执行此操作:

void player::rotate(int x, int y)
{
    double disX = x - 1100;
    double disY = y - 1300;
    double angle = atan2(disY, disX) * 180 / M_PI;
    setTransformOriginPoint(boundingRect().center());
    setRotation(rotation() + angle - orig);

    orig = angle;
}

其中(1100,1300)是玩家所在的位置。 我很确定这会解决问题,但它不能正确旋转。也许当地的立场不正确?

另外,如何移动播放器以使旋转不影响它?任何输入将不胜感激。提前致谢。

1 个答案:

答案 0 :(得分:0)

花了我一些时间,但我终于明白了!

函数rotate(int,int)的第一行应该是:

double disX = x - (1100 + boundingRect().center().x());
double disY = y - (1300 + boundingRect().center().y());