QT的坐标系统

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

在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值