Qt中2D绘图问题总结(二)----------坐标系统

时间:2021-01-03 06:45:21

坐标系统

使用QPainter绘制时使用到逻辑坐标,然后转换成绘图设备的物理坐标。

逻辑坐标到物理坐标的映射由QPainter的worldTransform()函数、QPainter的viewport()函数以及window()函数进行处理。

worldTransform()函数   ------------------   返回值为世界变换矩阵

viewport()函数   -------------------------   返回值为视口矩形

window()函数   --------------------------   返回值为窗口矩阵

视口(viewport)表示物理坐标下指定的一个任意矩阵,窗口(window)表示逻辑坐标下的同一个矩阵。这两个矩阵的四个角的坐标一一对应,利用QPainter绘制都是在逻辑坐标下绘图并对应到物理坐标下。

使用窗口-视口转换可以是逻辑坐标系统适合应用的要求,这个机制可以用来让绘图代码独立于绘图设备。

 //以下代码可以让视口和窗口维持相同的宽高比来防止变形
int side = qMin(width(),height());
int x = (width() - side/);
int y = (height() - side/);
painter.setViewport(x,y,side,side);

常用的四种坐标系的变换:

  • 平移  QTransform & translate(qreal dx, qreal dy)
  • 旋转  QTransform & rotate(qreal angle, Qt::Axis axis = Qt::ZAxis)
  • 缩放  QTransform & scale(qreal sx, qreal sy)
  • 扭曲  QTransform & shear(qreal sh, qreal sv)

QPainter对象的保存:save()保存当前状态,restore()恢复上次save()的状态。