QT 坐标变换
- 基本变换
默认的,QPainter在相关设备的坐标系统上进行操作,但是完全支持仿射坐标变换.绘图时可以使用QPainter::scale()函数缩放坐标系统,使用QPainter::rotate()函数顺时针旋转坐标系统,使用QPainter::translate()函数平移坐标系统,可以使用QPainter::shear()围绕原点来扭曲坐标系统.
坐标系统的2D变换由QTransform类实现,可以使用前面提到的那些便捷函数进行坐标系统变换,当然也可以通过QTransform类实现;而且QTransform类对象可以存储多个变换操作,当同样的变换要多次使用时,建议使用QTransform类对象.坐标系统的变换是通过变换矩阵实现的,可以在平面上变换一个点到另一个点.进行所有变换操作的变换矩阵都可以使用QPainter::worldTransform()函数获得,如果要设置一个变换矩阵,可以使用QPainter::setWorldTransform()函数,这两个函数也可以分别使用QPainter::transform()和QPainter::setTransform()函数来代替.
可以使用QPainter::save()函数来保存QPainter的变换矩阵,它会把变换矩阵保存到一个内部栈中,然后再需要恢复变换矩阵时再使用QPainter::restore()函数将其弹出. - 窗口-视口转换
使用QPainter绘制时会使用到逻辑坐标,然后再转换为绘图设备的物理坐标.逻辑坐标到物理坐标的映射由QPainter的worldTransform()函数,QPainter的viewport()以及window()函数进行处理.其中,视口表示物理坐标下指定的一个任意矩形,而窗口表示逻辑坐标下的相同矩形.默认的,逻辑坐标和物理坐标是重合的,都相当于绘图设备上的矩形. - 绘制路径
通过使用QPainterPath类对象,然后使用QPainter::drawPath()来进行绘制.QPainter