Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt Qpainter drawimage旋转时的不可预测位置_Qt_Qpainter - Fatal编程技术网

Qt Qpainter drawimage旋转时的不可预测位置

Qt Qpainter drawimage旋转时的不可预测位置,qt,qpainter,Qt,Qpainter,我正在尝试在现有的画家上绘制旋转图像。每次旋转和位置都会不同。旋转很好,但我似乎无法预测位置。奇怪的是,如果我画的是文本而不是图像,效果就不同了 文本似乎是从左下角的“点”开始绘制的,而图像是从左上角的“点”开始绘制的。但是在旋转之后,我不明白图像会发生什么 例如: QPoint point = QPoint( 80, 200 ); painter->rotate(45); painter->drawImage(point, QImage("/srv/....")); // i

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

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

例如:

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行:平移到左上角)