我正在尝试按鼠标位置旋转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)是玩家所在的位置。 我很确定这会解决问题,但它不能正确旋转。也许当地的立场不正确?
另外,如何移动播放器以使旋转不影响它?任何输入将不胜感激。提前致谢。
答案 0 :(得分:0)
花了我一些时间,但我终于明白了!
函数rotate(int,int)的第一行应该是:
double disX = x - (1100 + boundingRect().center().x());
double disY = y - (1300 + boundingRect().center().y());