J'utilisais QGraphicsItem avec juste setRotate et je n'avais aucun problème, jusqu'à ce que j'ajoute une fonctionnalité de groupe de rotation. Le problème est que lorsque destroyItemGroup est appelé, il applique la rotation comme une transformation aux éléments, et non comme une rotation. À cause de cela j'ai dû récupérer la rotation de cet objet QTransform.
Mon solution était d'ajouter les lignes suivantes à la méthode itemChange (crédit à la réponse de tom10):
QVariant MyGraphicItem::itemChange(GraphicsItemChange change, const QVariant &value)
{
if(change == ItemTransformChange)
{
auto transform = value.value<QTransform>();
setRotation(rotation() + qRadiansToDegrees(qAtan2(transform.m12(), transform.m11())));
return QVariant();
}
...
}
PS .: L'autre solution avec ACOS et M11() ne fonctionnait pas. Il se bloque pour certaines valeurs, comme expliqué par tom10.
+1 pour l'exactitude technique. La décomposition SVD de la partie de non-traduction vient également à l'esprit (composition de la rotation, mise à l'échelle anisotrope le long des axes x-y et rotation)) –