学习《QT 5.9 C++开发指南》的第8章“绘图”,其中有两个概念:视口和窗口。

这两个概念及其之间的关系让我很迷糊。“视口”这个名词在很多文章中出现过,大部分文章指的是图形显示设备的显示区域;但QT中不是这个意思,因为使用了设置视口这个函数后,绘制的图形仍然可以在设置的视口区域之外显示。

仔细研究了QT的说明文档和示例代码,对这两个概念有了一定的了解:

  1. 首先视口和窗口这两个概念只涉及坐标系转换,和内容是否显示无关;
  2. “窗口”使用“逻辑坐标系”表示;
  3. “视口”使用“物理坐标系”表示;

第2、3中的描述在很多文章中都是如此描述,但没有更近一步的说明,理解比较困难;

先说“物理坐标系”:

指的是在绘图设备(paint device)绘图的坐标系,比如在一个窗口上绘图,就需要一个坐标系,有三个关键要素:

  • 原点位置:左上方;
  • 方向:X向右,y向下;
  • 单位:像素;

这个容易理解,windows上一般的绘图坐标系都是如此;

再说“逻辑坐标系”:

在考虑这个坐标系之前,先把QT、绘图设备、接口等等具体和实现有关的东西放一边,它到底是什么呢?

假设我们想画一个圆,为了描述准确一点,我们同时给出一个坐标系来描述这个圆:

圆心坐标是(50, 0),半径是50;

这个坐标系就是一个逻辑坐标系,里面的圆就是我想绘制的图形。现在我想在一个窗口中绘制这个圆,看看还需要哪些信息?

比如:需要放到哪个地方呢?中间?偏左?偏右?圆的比例有多大?

这些信息如何处理和表述呢?

这里引入了一个“窗口”的概念,即QT文档中的"window",

我们使用一个窗口,也就是矩形,来衡量这个圆在这个矩形的位置,以及比例大小,来模拟我们希望在窗口中显示的内容;

这里显示了两幅图,可以看到"window"就像取景器一样,虽然都是同一个圆,但圆和矩形的比例、间隔等不同,导致这两个显示内容是有差别的;

上面就是逻辑坐标系、窗口的概念。

现在,使用”window”这个取景器选好了图形,我希望这个图形显示到一个窗口中,怎么做呢?

为了简化,以便在显示的时候,和物理坐标系对应,我们重新建立一个逻辑坐标系,下图红色部分,几个关键点:

  • Window:左上角、右下角在逻辑坐标系中的坐标;
  • 圆在这个坐标系中的坐标;
  • 原点位置:可以任选,怎么方便怎么来;不一定非得是window的左上角;
  • 方向:X向右,y向下;和物理坐标系一致;
  • 单位:单位距离;或者说没有具体的单位,因为只是示意图,没有对应到具体的事物;

重温“逻辑坐标系”这个词,为什么叫“逻辑”?因为和在什么平台、什么显示设备无关;

现在我想要在将上面的window绘制到一个窗口中,具体做法是在窗口中间开辟一个和window同比例的矩形,然后将这个图形绘制到这个窗口的矩形中。

为什么要同比例?就像放大缩小照片一样,我不想让照片变形,因此需要同比例;

一般有两种做法绘制:

  1. 将window中的图形坐标进行计算转换(这个计算转换需要我们自己写程序),转换完后,调用API进行绘制;这个转换过程一般比较繁琐;
  2. 让QT帮我们实现这个转换:

具体做法:

  1. 设置window的逻辑坐标系的坐标,比如window左上角的坐标位置,右下角的坐标位置;
  2. 设置我们想要在窗口中显示的位置(viewport),主要是左上角、右下角的位置;
  3. 绘制图形(绘制图形使用的是逻辑坐标系);

逻辑坐标系和物理坐标系的转换方法:

注意,如果在window之外绘制的图形,会显示出来。window和viewport只涉及坐标系转换。

jupyter中怎么把图形在一个单独的窗口显示_QT绘图中的坐标概念相关推荐

  1. jupyter中怎么把图形在一个单独的窗口显示_【一点小套路】手把手从安装Python到完成第一个数据分析项目...

    上一期的[一点小套路]只是讲了方法论,而没有真正意义上做到一份step by step的教程.所以,尼同学决定,这就给各位零基础的同学做一期手把手教学.全文将会从安装→Jupyter基础→数据分析与建 ...

  2. 编写一个抽象类Shape,声明计算图形面积的抽象方法。再分别定义Shape的子类Circle(圆)和Rectangle(矩形),在两个子类中按照不同图形的面积计算公式,实现Shape类中计算面积的方法

    编写一个抽象类Shape,声明计算图形面积的抽象方法.再分别定义Shape的子类Circle(圆)和Rectangle(矩形),在两个子类中按照不同图形的面积计算公式,实现Shape类中计算面积的方法 ...

  3. 在VC中实现模拟键盘,输入内容并显示在ListBox中。

    网上找的,还没试过,希望对楼主有帮助 模拟键盘按键 自动输入文字 键盘对于每个操作电脑的人员来说是最熟悉不过的了.键盘上的按键可分为两类: 按下后会在电脑的输入窗口上出现对应字符的按键,如字母键和数字 ...

  4. ASP.NET中自动生成XML文件并通过XSLT显示在网页中的方法

    XML是一种很方便的描述数据的方法,其格式也比较接近HTML,因此就有了想把XML直接通过网页的形式显示在浏览器中的想法.但是直接打开XML文件,浏览器是无法解析的,只是把文档的结构原封不动地呈现出来 ...

  5. IDEA怎么在单独的窗口显示差异和并排两排显示代码?

    ctrl+d 之后发现两个差异是在页面旁边,不好对比前后代码 在箭头图标上面右键 选择在单独的窗口中显示差异 如果要还原 齿轮-在编辑器选项卡中显示差异

  6. MVC中根据后台绝对路径读取图片并显示在IMG中

    数据库存取图片并在MVC3中显示在View中 根据路径读取图片: byte[] img = System.IO.File.ReadAllBytes(@"d:\xxxx.jpg"); ...

  7. Android 曝光采集,商品view曝光量的统计,判断RecyclerView中某子view是否可见 view是否显示在屏幕中 view展示次数统计...

    近期pm提出需要统计首页商品的曝光亮,由于我们的首页是用的recylerview实现的,这里就来讲下如何使用监听recylerview的滚动事件来实现子view的曝光量统计,我们这里说的view都是列 ...

  8. UE4学习笔记:学习UE4中的UMG(图形UI设计器)工具(四):UMG中的动画

    学习完了各自控件及操作后来了解控件蓝图中的动画功能 一.简单的UI动画 我们先来接触控件蓝图左下角的动画面板,首先在视觉界面中添加一个Image控件,并设置图片 在动画面板中单击+Animation, ...

  9. html5中 save方法,如何HTML5画布另存为窗口8 Metro应用中的图像文件?(How to save html5 c...

    var myImage = canvas.toDataURL("image/png"); 我认为myImage在现在png格式如何保存编码的图像字节myImage作为一个文件(图片 ...

最新文章

  1. 使用Docsify搭建Markdown文件服务器
  2. proto buffer
  3. koa cluster 使用多进程
  4. docker分离部署lnmp
  5. 【JavaScript】父子页面之间跨域通信的方法
  6. boost::endian::order的用法测试程序
  7. NASA公布“门户计划”,在月球轨道建立空间站进一步探索月球
  8. 如何在Go中使用切片容量和长度
  9. for循环语句例题及解析python_Python入门第8课,for语句综合练习,突破循环累加难点...
  10. 网络爬虫学习(十二)
  11. 生存分析第四课:Cox Proportional hazards model
  12. 联想服务器修改开机启动项,怎样在Win10系统里面手动设置开机启动项
  13. golang的json的时间格式化解决方案
  14. S-003 MIPI接口与LVDE接口的区别
  15. 推动区块链技术应用创新河南开展区块链应用场景需求和典型应用案例征集工作
  16. H5APP WEB 支付开发 (银联 微信 支付宝)流程
  17. C++ Programming Basic acknowledge
  18. python 识别图像中的文字(数字)之python图文识别
  19. 一次Flannel和Docker网络不通定位问题
  20. win7怎么修改服务器端口,教你在Win7中如何轻松修改3389远程桌面端口

热门文章

  1. 师大校园网迅雷解封软件 之 配置QQ旋风2
  2. php 判断是否是机器人,如何用PHP检测搜索引擎机器人?
  3. red hat 查看mysql密码_Red Hat 下 MySQL root密码恢复
  4. Java get set6_Java oop 的题与答案6:使用程序模拟英雄金币数,get与set知识,访问修饰符(有图)...
  5. 《量化交易核心策略开发:从建模到实战》读书笔记
  6. win10专业版虚拟机配置服务器,如何在Win10专业版中添加Hyper-V虚拟机?
  7. dubbo 自定义路由_高性能可扩展分布式RPC框架Dubbo内核原理揭秘
  8. 测试人如何高效地设计自动化测试框架?
  9. Python操作数据库完成接口测试
  10. 比较器matlab,用于比较 MATLAB 对象的公共属性的比较器 - MATLAB - MathWorks 中国