QT的坐标系统

来源:互联网 发布:javaweb查询数据库 编辑:程序博客网 时间:2024/05/01 12:02

默认情况下,窗口和视口值得的都是绘图设备的那个矩形。

在Win10下,没有改变一个自定义的widget的尺寸时(通过resize() 函数,resize() 函数的参数是物理像素),画出的widget是640×480物理像素的。

void PaintD::paintEvent(QPaintEvent *){    painter.begin(this);    painter.fillRect(0, 0, 200, 200, Qt::green);    painter.drawPoint(100, 100);    painter.drawLine(0,0, 100, 100);    painter.end();}
使用默认的窗口的物理大小,此时的逻辑坐标和物理坐标一致:


当改变窗口的逻辑尺寸,注意物理尺寸默认的仍然是640*480的物理像素大小。

void PaintD::paintEvent(QPaintEvent *){    painter.begin(this);    painter.setWindow(0, 0, 200, 200);   //设置逻辑坐标窗口的尺寸    painter.fillRect(0, 0, 200, 200, Qt::green);    painter.translate(100, 100);  //平移坐标原点到矩形的中心    painter.drawPoint(100, 100);    painter.drawLine(0,0, 100, 100);    painter.end();}


当改变窗口坐标系之后再修改视口坐标系:

void PaintD::paintEvent(QPaintEvent *){    painter.begin(this);    painter.setWindow(0,0,200, 400);    painter.setViewport(0, 0, 200, 200);   //设置逻辑坐标窗口的尺寸    painter.fillRect(0, 0, 200, 200, Qt::green);    painter.drawPoint(100, 100);    painter.drawLine(0,0, 100, 100);    painter.end();}

此时视口的大小为 200×200/200 = 200, 200×200/400 = 100.

也就是绿色的区域的大小为200*100 物理像素。

给人的感觉是:画图的区域由视口和窗口的较小的那个决定,包括QPainter 的坐标。较小的那个尺寸需要按照较大的那个,按照比例来换算。较大的那个的尺寸是物理像素尺寸。






0 0