ich versuche gerade ein Rechteck, das mittels zweier QPoints in einer QRect Struktur beschrieben ist, um den linken oberen Eckpunkt zu drehen mit Hilfe von painter.rotate(angle) innerhalb eines QPaintEvents. Prinzipiell funktionert das auch, nur dreht er eben nicht nur ausschließlich um den linken oberen Eckpunkt, sondern dieser wird auch noch entlang irgendeiner Kreisbahn im Bild verschoben. Vor dem Aufruf der rotate Funktion verschiebe ich mittels world Matrix durch painter.translate(-1 * rechteck.x(), -1 * rechteck.y()) das Rechteck so, dass die linke obere Ecke des Rechtecks auf den Ursprung des viewports gelegt wird, also auf die Koordinaten (0,0). Anschließend verrechne ich die Rotationsmatrix mittels painter.rotate(angle) und danach mache ich die Translation wieder rückgängig mittels painter.translate(rechteck.topLeft()).
Also das Ganze nochmal zusammengefasst:
Code: Alles auswählen
void testklasse::paintEvent(QPaintEvent * /* event */ )
{
QPainter painter(this);
painter.drawPixmap(0,0,pixmap);
painter.setPen(palette().light().color());
// 'rechteck' ist vom Typ QRect
painter.translate(-1 * rechteck.x(), -1 * rechteck.y());
painter.rotate(angle);
painter.translate(rechteck.topLeft());
painter.drawRect(rechteck.normalize().adjusted(0,0,-1,-1));
}Gruß
René