1

我正在定制 QuantumGIS,它使用 Qt 的 Qpainter 来绘制和绘制......

我正在尝试在画布上绘制一条多段线,该多段线作为消息队列的更新......绘制非常好......但在我作为更新获得的多段线或多边形对象中还包括一个角度场用于物体的旋转。问题是,当我尝试在 qpainter 使用painter.rotate() 方法绘制折线之前旋转线时,线旋转得很好,但绘制的线的位置会发生变化......并且它会在每次缩放和Qgis画布的平底锅..在设置painter.rotate()之前,我正在保存画家状态并在绘制之后再次恢复其状态,我认为这类似于OpenGL的push / popMatrix函数。Qpainter 的保存恢复功能是否类似于 opengl 的 push/popMatrix 功能?

这是一个代码片段:

p->save();
  //p->rotate(45);
  p->scale( 1.0 / rasterScaleFactor, 1.0 / rasterScaleFactor );
  p->drawPolyline( pa );
  p->restore();

帮助表示赞赏。谢谢。

4

2 回答 2

1

阅读文档,您会看到 QPainter::save() 仅“保存当前的画家状态”。它不会重置转换。您的问题是因为原始转换矩阵与您自己的比例或旋转混合在一起。您的代码片段太少,无法理解绘画的上下文,但我认为您需要在多段线绘画之前适当地重置或修改转换,可能使用QPainter::setTransform()

我还建议阅读QPainter 文档中的 Coordinate Transformations 部分,并尝试相关示例

于 2009-05-28T08:49:30.907 回答
0

你最好的选择是在QGIS 邮件列表中问这个问题

于 2009-05-09T14:28:53.837 回答