Qt中QPainter绘图在绘图设备上绘图的时候,会牵涉到坐标以及坐标相关的一些概念。
对于一个给定的绘图设备(paint device,qwidget,qpixmap等),在绘图时有两个坐标系:物理坐标系,逻辑坐标系。
物理坐标系是一个真实的坐标系,在Qt中,其原点处于绘图设备的左上角,其单位长度为绘图设备上一像素长度,其X轴向右增长,Y轴向下增长。
而逻辑坐标系是一个抽象的坐标系,其原点、单位长度没有实际意义,其X轴向右增长,Y轴向下增长。
绘图时,图像绘制在逻辑坐标系上,再通过窗口——视口映射,世界转换将逻辑坐标系映射到物理坐标系上。进而把绘制在逻辑坐标系上的图像映射到物理坐标系上。
窗口基于逻辑坐标系,视口基于物理坐标系。在没有做过改动的情况下,他们是一样的,都是以绘图设备大小为大小,左上角为原点(0,0)。使用以下两个函数可以修改一个基于逻辑坐标系的窗口矩形,与一个基于物理坐标系的视口矩形。
void QPainter::setWindow ( int x, int y, int width, int height )
void QPainter::setViewport ( int x, int y, int width, int height )
参数:
x:窗口/视口左上角x坐标 y:窗口/视口左上角y坐标
width:窗口/视口长度 height:窗口/视口高度
新建一个Qt5的窗口应用程序,基类选择QWidget,勾选ui。窗口的大小为400*300 也是Qt快速入门之中例子(10-3)
在其重绘事件中
void Widget::paintEvent(QPaintEvent *event)