Qt坐标变换

2013年12月26日 由 Creater 留言 »

简介

在QT中,界面的几何尺寸获取可以通过如下图的示意来操作。
0_1314892991cj5q.gif
在Qt中的一个绘画设备是一个可画的二维平面。QWidget、QPixmap、QPicture和QPrinter都是绘画设备。QPainter是一个可以在上面画的对象。
原本坐标系的原点坐标是在绘图设备的左上角(0,0),X 向右增长, Y 向下增长。
coor
现在想把它变成,原点坐标在窗口中间,X 向右增长,Y向上增长,即是标准的数学中的坐标系。
coor2
painter.setWindow(x,y,width(),height());
用setwindow这个函数,表示什么意思。前两个参数左上角位置,后两个参数宽高。
可以把变换好的坐标系在纸上画出来,左上角坐标传给前两个参数,后两个参数宽高可以算出来。
width = 50-(-50) = 100;
height = -50-50 = -100;
就是用变换好的坐标系右下角坐标减去左上角坐标。那么就是

painter.setWindow(-50,50,100,-100);

一般使用如下方式

painter.setWindow(-width()/2,height()/2,width(),-height());

就可以达到目的了。

和坐标变换相关的类

这里是一些和坐标系统关系很近的类:
1. QPoint是坐标系统中的单个二维点。Qt中处理点的绝大多数函数都可以接受QPoint参数或者两个整数参数,比如QPainter::drawPoint()。
2. QSize是单个二维矢量。在内部,QPoint和QSize是一样的,但是一个点和一个大小不同,所以这两个类都存在。同样,绝大多数函数都可以接受一个QSize或者两个整数,比如QWidget::resize()。 
3. QRect是一个二维的矩形。绝大多数函数都可以接受一个QRect或者四个整数,比如QWidget::setGeometry()。
4. QRegion是点的一个任意组合,包括所有通常的组合操作,例如QRegion::intersect(),并且一些常用的函数返回一个矩形的列表,这个矩形的列表的集合等于一个区域。QRegion被例如QPainter::setClipRegion()、QWidget::repaint()和QPaintEvent::region()使用。
5. QPainter是一个绘图的类。它可以用同样的代码在任何一个设备上绘画。设备中是存在差异的,QPrinter::newPage()是一个很好的例子,但QPainter可以对所有的设备按同一种方式工作。
6. QPaintDevice是一个QPainter可以在上面绘画的设备。这里有两种都基于像素的内部的设备,和两种外部设备,QPrinter和QPicture(它把QPainter的命令都记录在一个文件或者其它的QIODevice,然后再运行它们)。其它的设备都可以被定义。

广告位

发表评论

你必须 登陆 方可发表评论.