Qt中绘图坐标QPainter,Viewport与Window的关系
发布日期:2021-10-23 14:13:20 浏览次数:7 分类:技术文章

本文共 710 字,大约阅读时间需要 2 分钟。

    在Qt中常常要自己重载一些paintEvent函数,这个时候往往忽略了两个很关键的API,那就是setViewport和setWindow。

    Viewport,顾名思义,反应的是物理坐标,就是你实际想在当前坐标系下哪块区域画图,比如(50,50,100,100)的一个rect.

    Window而是逻辑坐标,你可以设置它从(0,0)开始,这样你可以setViewport(m_rect)之后,setWindow(0, 0, m_rect.width(), m_rect.height())来重新把物理坐标的rect映射到自己以(0,0)坐标系下的rect来进行绘图,十分方便。这样你可以在保持逻辑坐标 window不变的情况下,动态的改变viewport物理坐标,做到放大,平移等操作。比如把viewport放大成两倍,但此时你的window画图 坐标就不需要改变。做到了逻辑和物理的两者分离。

    同样的,你也可以用viewport和window来实现Qt中QGraphics那一套的坐标映射关系,比如mapFromParent等,mapToParent.

    已知当前m_rect,作为自己的父rect.此时传进来的pos只需要减去m_rect.topLeft()就是mapFrom,加上 m_rect.topLeft()就是mapTo,同样对于rect来说rect.topLeft - m_rect.topLeft, rect.widget(), rect.height()就完成了mapFromParent的Rect映射。

转载于:https://www.cnblogs.com/rickyk/p/3740575.html

转载地址:https://blog.csdn.net/weixin_30588827/article/details/98965210 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:鸟哥的linux私房菜学习-(四)linux命令的基本概念
下一篇:关于ssh的介绍

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月18日 04时09分22秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章