es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo rotar un QGraphicsPixmap alrededor de un punto de acuerdo con el evento de movimiento del mouse?

Quiero rotar un QGraphicsPixmapItem alrededor de un punto según la posición del ratón.

Así que intenté lo siguiente:

void Game::mouseMoveEvent(QMouseEvent* e){
  setMouseTracking(true);
  QPoint midPos((sceneRect().width() / 2), 0), currPos;

  currPos = QPoint(mapToScene(e->pos()).x(), mapToScene(e->pos()).y());

  QPoint itemPos((midPos.x() - cannon->scenePos().x()), (midPos.y() - cannon->scenePos().y()));

  double angle = atan2(currPos.y(), midPos.x()) - atan2(midPos.y(), currPos.x());
  cannon->setTransformOriginPoint(itemPos);
  cannon->setRotation(angle);
}

Pero la imagen se mueve unos pocos píxeles.

Quiero obtener un resultado como este:
enter image description here

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para rotar un QGraphicsPixmapItem alrededor de un punto según la posición del mouse, se puede utilizar la función setTransformOriginPoint() para establecer el punto de origen de la rotación alrededor del cual se desea rotar el pixmap.

    QPoint mousePos = event->pos();
    QPointF pivot = pixmapItem->boundingRect().center();
    pixmapItem->setTransformOriginPoint(pivot);
    double angle = qAtan2(mousePos.y() - pivot.y(), mousePos.x() - pivot.x());
    pixmapItem->setRotation(qRadiansToDegrees(angle));
    

    En este ejemplo, la posición del mouse se obtiene del objeto de evento QMouseEvent. QPointF pivot es el punto central del rectángulo delimitador de QGraphicsPixmapItem. La función setTransformOriginPoint() se utiliza para establecer el punto de origen de la rotación en el punto pivot. El ángulo de rotación se calcula utilizando la función atan2(). Finalmente, la función setRotation() se utiliza para establecer el ángulo de rotación en grados.

Comments are closed.