Qt framework. Nie udało mi się znaleźć odpowiedzi.
Do rzeczy:
Obiekty typu QGraphicsItem standardowo mają początek układu współrzędnych w lewym górnym rogu i mogą być transformowane za pomocą metod typu scale, rotation, move itp. względem tego początku. Możliwe jest ustawienie bez problemu za pomocą setTransformOriginPoint(); innego punktu do wykonania tych metod, jednak niestety jeżeli już wykonaliśmy jakieś transformacje względem poprzedniego punktu, przekształca to także wszystkie dokonane dotychczas transformacje względem nowego punktu.
Czy ktoś wie/ma pomysł na to, czy da się "zablokować" dokonane już transformacje tak, by nie podlegały ( bądź "nie widziały") zmiany początku układu wsp.?
Mam taki problem, że w jednym z moich obiektów na którym wykonałem już skalowania, obroty itp, chciałbym ustawić obracający się ciągle obrazek tła z QTimerem. Chcę, żeby obiekt pozostał taki, jaki już jest, a obrazek miał punkt obrotu na środku.
Kod trochę z głowy bo nie ma sensu, żebym wklejał. Myślę, że istota problemu jest oddana.
QGraphicsItem *mojItem = new QGraphicsItem();
//ustawienie potrzebnych mi bajerów do obiektu, zdjęcia itp... nieistotne, ważne, że ma slot "rotateImage();", który obraca //obrazek przy wywołaniu o ileśtam stopni
QTimer *timer = new QTimer();
connect(timer,SIGNAL(timeout()),mojItem,SLOT(rotateImage()));
timer->start(25); //wywoływanie obrotu co 25 milisekund
Jeżeli nie zmienię początku układu na centrum, to obrazek obraca się wokół lewego górnego rogu obiektu.
mojItem->setTransformOriginPoint(mojItem->boundingRect().center());//zmiana początku układu na środek
Jeżeli zmienię początek na środek, wszystkie transformacje które wykonałem wokół lewego górnego rogu są wykonane ponownie, ale wokół centrum.
Szukałem w metodach list przechowujących transformacje obiektu, ale nic tam nie znalazłem.
mojItem->tranformations(). (tutaj jakieś metody, ale nic tam nie ma o blokowaniu)
Ktokolwiek widział, ktokolwiek wie.
EDIT: SOLVED
Wystarczyło dodanie obrazka jako dziecka dla mojItem, i ustawienie JEGO punktu obrotu na środek.
mojItem->mojeDziecko->setTransformOriginPoint(mojItem->mojeDziecko->boundingRect().center());//ustawienie pkt obrotu na środek
mojItem->mojeDziecko->setRotation(rotation);//rotacja