2013-05-16 178 views
2

我只是想移動圖像的小部件的軸,並圍繞小部件的中心(如任何數字繪畫軟件中的畫布)旋轉,但它圍繞其左上角旋轉...Qt圖像移動/旋轉

QPainter p(this); 
QTransform trans; 

trans.translate(width()/2, -height()/2); 
trans.rotate(angle); 

QTransform inverse = trans.inverted(); 
inverse.translate(-canvas.width()/2, -canvas.height()/2); 

p.setTransform(trans); 
p.drawImage(inverse.map(canvasPos), canvas); 

如何讓它正確旋轉?

回答

2

對象圍繞其左上角而不是其中心旋轉的常見原因是因爲它的尺寸在左上角用0,0定義,而不是在對象的中心。你沒有展示'canvas'對象是什麼,所以假設它像QGraphicsRectItem,你需要聲明它的左上角,寬度,高度爲-x/2,-y/2,width ,高度以確保物體的中心點位於0,0。然後當你旋轉物體時,它會圍繞它的中心旋轉。

此外,您應該嘗試從繪畫功能中分離旋轉和平移邏輯以獲得最佳性能。

4

您可以在單個轉換中合併圖像的初始重新縮放,旋轉和最終結果在小部件中心的居中。

QTransform的操作被以相反的順序進行,因爲最新的一個施加到QTransform將施加到圖像的第一個:

// QImage canvas; 
QPainter p(this); 
QTransform trans; 

// Move to the center of the widget 
trans.translate(width()/2, height()/2); 

// Do the rotation 
trans.rotate(angle); 

// Move to the center of the image 
trans.translate(-canvas.width()/2, -canvas.height()/2); 

p.setTransform(trans); 
// Draw the image at (0,0), because everything is already handled by the transformation 
p.drawImage(QPoint(0,0), canvas);