通常利用QPainter的drawXXX函数绘制的图形都是不带旋转的,而QPainter的rotate函数解释如下:
void QPainter::rotate(qrealangle)
Rotates the coordinate system clockwise. The givenangle parameter is in degrees
即:顺时针旋转坐标系。给定的angle是度数。经测试可知,rotate旋转了坐标系后,只对后续的DrawXXX函数起作用——在resetTransform之前:
void QPainter::resetTransform()
Resets any transformations that were made usingtranslate(),scale(),shear(),rotate(),setWorldTransform(),setViewport() andsetWindow().
即:重置前面用translate、scale、shere、rotate、setWorldTransform、setViewport、setWindow等设置的变形。
此外,还要用到第三个函数:
void QPainter::translate(constQPointF &offset)
Translates the coordinate system by the givenoffset; i.e. the given offset is added to points.
即:平移坐标系,offet是给定的偏移量。
完成绘制旋转图形的过程如下(以矩形为例):
(1)重置变换:调用resetTransform
(2)将坐标系平移到矩形中心:translate(x0,y0)
(3)将坐标系旋转[以(x0,y0)为中心]:rotate(angle)
(4)drawRect(-w/2,-h/2,w,h)
(5)重置变换:调用resetTransform
其它图形过程类似。
==================== 参考代码 ===================
# -*- coding: utf-8 -*-
painter.translate(100, 100)
painter.rotate(70)painter.resetTransform()
painter.resetTransform()
painter.end()结果如下: