MIt folgender Funktion lasse ich ein QLabel um die eigene Achse rotieren:
Das klappt auch ganz gut, aber leider eiert der Pfeil. Das Problem liegt wohl am QT Koordinatensystem. Für das QLabel mylabel ist praktisch der Urpsrung (0/0) die linke obere Ecke des Labels. Da das Image ja auf das Label gezeichnet wird, eiert das Ding, wie ein Quadrat das um die linke obere Ecke gedreht wird. Alle 90° erreicht es die Position, die es haben sollte.
Ich müsste also QT jetzt beibringen, dass (nur) für dieses Label, der Nullpunkt an den QT-Koordinate 16/16 sein soll (da der Pfeil ne Auflösung von 32x32 Pixel hat).
Mit matrix.translate(16,16) habe ich es bereits versucht - hat nicht geklappt
Hat jemand noch ne Idee?
Code:
SimField::SimField(int commands[], QWidget *parent)
: QWidget(parent)
{
setFixedSize(450, 450);
setPalette(QPalette(QColor(250, 250, 200)));
setAutoFillBackground(true);
mylabel = new QLabel(this);
mylabel->resize(32,32);
image = QPixmap("resources/uparrow.png");
mylabel->setPixmap(image);
mylabel->move(200, 200);
mylabel->show();
connect(&update_timer, SIGNAL(timeout()), this, SLOT(updateSimField()));
update_timer.setInterval(10);
update_timer.start();
}
void SimField::updateSimField()
{
matrix.rotate(1);
mylabel->setPixmap(image.transformed(matrix));
}
Das klappt auch ganz gut, aber leider eiert der Pfeil. Das Problem liegt wohl am QT Koordinatensystem. Für das QLabel mylabel ist praktisch der Urpsrung (0/0) die linke obere Ecke des Labels. Da das Image ja auf das Label gezeichnet wird, eiert das Ding, wie ein Quadrat das um die linke obere Ecke gedreht wird. Alle 90° erreicht es die Position, die es haben sollte.
Ich müsste also QT jetzt beibringen, dass (nur) für dieses Label, der Nullpunkt an den QT-Koordinate 16/16 sein soll (da der Pfeil ne Auflösung von 32x32 Pixel hat).
Mit matrix.translate(16,16) habe ich es bereits versucht - hat nicht geklappt
Hat jemand noch ne Idee?