2016-03-28 22 views
3

Ich versuche, ein Bild um seinen Ursprung (Zentrum) in QT zu rotieren, indem ich QWidgts in C++ benutze. Ich habe hier viele Dinge ausprobiert, aber egal, was ich mache, das Bild dreht sich immer wieder um eine beliebige Position, von der ich keine Ahnung habe. Bitte hilf mir hier draußen. Ich bin neu in QT.Wie wird ein Bild in QT QWidgets C++ um sein Zentrum gedreht?

void gaugeWithRedZoneImage::rotate() 
{ 
    QPixmap pixmap(*gaugeMainScreen->pixmap()); 
    QMatrix rm; 
    rm.translate(0, 0); 
    rm.rotate(-360); 
    pixmap = pixmap.transformed(rm); 
    gaugeMainScreen->setPixmap(pixmap); 

    /*QTransform rotate_disc; 
    rotate_disc.translate(pixmap.width()/2.0 , pixmap.height()/2.0); 
    rotate_disc.rotate(-60); 
    rotate_disc.translate(-(pixmap.width()/2.0) , -(pixmap.height()/2.0)); 
    pixmap = pixmap.transformed(rotate_disc); 
    gaugeMainScreen->setPixmap(pixmap);*/ 
} 
+0

Wenn Sie Ihre Frage ändern möchten, tun Sie dies, anstatt Kommentare hinzuzufügen. –

Antwort

1

Formular die documentation von QPixmap::transformed():

Die Transformation Transformation intern eingestellt wird, um unerwünschte Übersetzung zu kompensieren; h. die erzeugte Pixmap ist die kleinste Pixmap, die alle transformierten Punkte der Original-Pixmap enthält.

Das bedeutet, dass die Methode sicherstellt, dass keine Beschneidung durch Anhängen der Zeichenfläche erfolgt. Ganz gleich, um welches Rotationszentrum es sich handelt, die automatische Verlängerung der Leinwand wird fast immer zu einer wahrgenommenen Verschiebung führen.

Bildbeispiele können helfen, das Problem weiter zu diagnostizieren.

+0

Danke. Schätze deine Hilfe. – Sam

0

Wie ypnos sagte, ist Ihr Problem nicht das Rotationszentrum. Wenn Sie Ihr Bild drehen, ändern sich seine Breite und Höhe höchstwahrscheinlich und passen nicht mehr in die Abmessungen Ihres Containers (gaugeMainScreen).

Sie haben einige Möglichkeiten, dieses Problem zu lösen. Eine davon ist, dass Sie Ihren Container so einrichten, dass sein Inhalt skaliert wird (Sie können die Methode setScaledContents() verwenden). In diesem Fall müssen Sie das Originalbild beibehalten und es verwenden, wenn Sie eine Drehung anwenden, ansonsten wird Ihr Bild immer kleiner.