我正在尝试在现有画家上绘制旋转图像。每次旋转和位置都不同。旋转工作正常,但我似乎无法预测位置。奇怪的是,如果我绘制文本而不是图像,它的工作方式会有所不同。
文本似乎以“点”开始绘制LEFT BOTTOM,而图像以“点”处的LEFT TOP开始。但是在旋转后我不明白图像会发生什么......
示例:
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!
我想也许我需要使用translate(x,y)以防我使用drawImage,但是我不知道我需要使用什么样的x和y取决于旋转和为什么它与drawText一起正常工作。
答案 0 :(得分:2)
对任何人来说 - 我还有另一个脑漏......我应该首先将坐标系转换到我想让图像结束的地方,然后旋转然后将图像绘制在0,0 ... < / p>
代码变为:
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
答案 1 :(得分: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行:转换为左上角)