anonim Temat założony przez niniejszego użytkownika |
Problem z rotacją obrazka(QPixmap) [Qt] » 2012-08-06 18:47:12 Witam
Mam problem z obracaniem obrazka względem jego środka
Oto kod funkcji paintEvent:
void PaintArea::paintEvent( QPaintEvent * e ) { QPainter painter( this ); QMatrix mat = QMatrix().rotate( 20 ); painter.setMatrix( mat ); painter.drawPixmap( HH.XY.x(), HH.XY.y(), HH.pixPlane.width(), HH.pixPlane.height(), HH.pixPlane ); }
Obrazek obraca się, ale nie względem środka, tylko względem jakiegoś odległego punktu.
Pierwsze 3 linie są z tego, co udało mi się znaleźć w internecie, natomiast problemem jest ostatnia linijka,
ponieważ tego już nie udało mi się skopiować ;), a dokładniej pierwsze dwa argumenty.
Jakby ktoś mógł opisać mi co w nie wstawić byłbym bardzo wdzięczny
|
|
DejaVu |
» 2012-08-06 20:32:40 Strzelam:
void PaintArea::paintEvent( QPaintEvent * e ) { QPainter painter( this ); QMatrix mat = QMatrix().rotate( 20 ).translate( H.pixPlane.width() / 2, HH.pixPlane.height() / 2 ); painter.setMatrix( mat ); painter.drawPixmap( HH.XY.x(), HH.XY.y(), HH.pixPlane.width(), HH.pixPlane.height(), HH.pixPlane ); }
|
|
anonim Temat założony przez niniejszego użytkownika |
» 2012-08-06 21:08:09 Dzięki, ale to nie działa t.z.n. obraca pixmapę, ale względem punktu 0.0, to jest lewego, górnego narożnika |
|
DejaVu |
» 2012-08-06 21:15:21 To sprawdź to:
QMatrix mat = QMatrix().translate( H.pixPlane.width() / 2, HH.pixPlane.height() / 2 ).rotate( 20 );
|
|
anonim Temat założony przez niniejszego użytkownika |
» 2012-08-06 21:21:56 niestety też nie działa, dalej obraca wokół 0.0 p.s. mamy 2 brązowe medale dzisiaj ;) |
|
DejaVu |
» 2012-08-06 21:57:12 http://doc.qt.nokia.com/qt-maemo/qpainter.html
Użyj więc metody translate na obiekcie QPainter zanim ustawisz macierz rotacji. Niemniej jednak zawiodłem się :P Myślałem, że da radę wykonać macierz translacji + rotacji i potem wykonać operacje na obiekcie :) |
|
anonim Temat założony przez niniejszego użytkownika |
» 2012-08-06 22:02:13 void PaintArea::paintEvent( QPaintEvent * e ) { QPainter painter( this ); painter.translate( HH.pixPlane.width() / 2 + 1, HH.pixPlane.height() / 2 + 1 ); QMatrix mat = QMatrix().rotate( HH.angle ); painter.setMatrix( mat ); painter.drawPixmap( HH.XY.x(), HH.XY.y(), HH.pixPlane.width(), HH.pixPlane.height(), HH.pixPlane ); }
o to chodzi? |
|
DejaVu |
» 2012-08-06 22:09:35 Tak (ale wydaje mi się, że przesunięcia powinny być ujemne, a nie dodatnie).
/edit:
Poza tym polecam poczytać podstawy OpenGL-a. Zrozumiesz wówczas jak działają takie twory jak QPainter, a z tego co widzę w dokumentacji to nazewnictwo jest analogiczne do tego, które jest stosowane w OpenGL-u (do przekształceń sceny). |
|
« 1 » 2 |