Qpainter通过旋转绘制不可预测的位置



我正试图在现有的画家上绘制一个旋转的图像。每次的旋转和位置都会有所不同。旋转效果很好,但我似乎无法预测位置。奇怪的是,如果我画的是文本而不是图像,效果会有所不同。

文本似乎以"点"处的左下角开始绘制,而图像以"点"处的左上角开始绘制。但在旋转之后,我不明白图像会发生什么。。。。

示例:

QPoint point = QPoint( 80, 200 );
painter->rotate(45);
painter->drawImage(point, QImage("/srv/...."));  // i can't predict where this goes
painter->drawText(point, "Rotated text");        // but I can predict exactly where this goes!

我在想,如果我使用drawImage,也许我需要使用translate(x,y),但我不知道我需要使用什么样的x和y,这取决于旋转以及为什么它能很好地使用drawText。

对于任何阅读的人来说,我又有一次脑漏。。。我应该首先将坐标系转换到我希望图像结束的位置,然后旋转,然后在0,0…处绘制图像

代码变为:

painter->translate(80,200);  // this will be our point of origin
painter->rotate(45);         // now do the rotation at this point
painter->drawImage(0,0,QImage("/srv/....")); // since we're already at our point enter 0,0

对于转换,您需要执行以下操作,例如:

painter->translate(m_bound.width()/2.0,m_bound.height()/2.0);
painter->rotate(m_angle);
painter->translate(-m_bound.width()/2.0,-m_bound.height()/2.0);
//.... Paint what you want as normal ....//

它简单地平移到左上角,然后旋转,最后平移回原始位置
请注意,这些转换是矩阵,因此影响是相反的(第1行:向后平移,第2行:旋转,第3行:平移到左上角)

最新更新