我正在定制QuantumGIS,它使用Qt的Qpainter来绘制和绘制...
我正在尝试在画布上绘制一条折线,该画布作为更新通过消息queues..the draw is very fine...but in the polyline or polygon objects还包括一个用于旋转对象的角度字段。问题是,当我试图在qpainter使用painter.rotate()方法绘制折线之前旋转直线时,直线旋转得很好,但是changes..and绘制的直线的位置在每次缩放和平移Qgis画布时都会改变。在设置painter.rotate()之前,我保存了painter的状态,在绘制之后-再次恢复它的状态,我相信这类似于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();感谢您的帮助。谢谢。
发布于 2009-05-28 08:49:31
阅读documentation,你会发现QPainter::save()只“保存当前的画图状态”。它不会重置变换。你的问题是因为原始的变换矩阵与你自己的缩放或旋转混合在一起。您的代码片段太小,无法理解绘画的上下文,但我认为您需要在绘制polyline之前适当地重置或修改转换,也许可以使用QPainter::setTransform()。
我还推荐阅读QPainter documentation中的坐标转换部分,以及尝试使用related example。
发布于 2009-05-09 14:28:54
最好的办法是在QGIS Mailing List中提出这个问题
https://stackoverflow.com/questions/842782
复制相似问题