当前位置: 首页 > news >正文

Qt 使用视口和窗口作图

物理坐标系与逻辑坐标系

绘图设备的物理坐标系是基本的坐标系,通过 QPainter 的平移、旋转等坐标变换可以得到更容
易操作的逻辑坐标系。
 

物理坐标系也称为视口(viewport)坐标系,逻辑坐标系也称为窗口( window)
坐标系,通过内部的坐标变换矩阵, QPainter 能自动将逻辑坐标变换为绘图设备的物理坐标。

视口

视口是指绘图设备的任意一个矩形区域,它使用物理坐标系。我们可以只选取物理坐标系中的一
个矩形区域来绘图,默认情况下,视口等于绘图设备的整个矩形区域。

 定义视口

painter.setViewport(50,0,200,200);

窗口

窗口与视口是同一个矩形区域,但是窗口是用逻辑坐标系定义的,窗口可以直接定义矩形区域的逻辑坐标范围。

void QPainter::setWindow(int x, int y, int width, int height)
painter.setWindow(-50,-50,100,100);

视口和窗口使用例子

初始化

QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);int W= this->width();int H = this->height();int side = qMin(W,H);

定义视口矩形

取长和宽的最小值,作为正方形的边长

    QRect  rect((W-side)/2,(H-side)/2,side,side);painter.drawRect(rect);//绘制一个矩形painter.setViewport(rect);//设置为视口

 设置窗口的坐标系

    painter.setWindow(-100,-100,200,200);//设置窗口的坐标系

设置画笔

    QPen pen;pen.setWidth(1);pen.setColor(Qt::red);pen.setStyle(Qt::SolidLine);pen.setCapStyle(Qt::FlatCap);//线端点样式pen.setJoinStyle(Qt::BevelJoin);//线的连接点样式painter.setPen(pen);

使用窗口坐标系作图

画圆,每10°,通过坐标系的旋转画一个圆,画24个

    for(int i=0;i<24;i++){painter.drawEllipse(QPoint(50,0),50,50);painter.rotate(10);}

结果

总结

1. 设置了窗口坐标系,按照窗口坐标系作图

2.当窗口的宽度大于高度时,以高度为正方形边长,当高度大于宽度时,以宽度为正方形边长,且图形是自动缩放的。

3.首先定义了一个正方形视口,正方形以绘图设备的长、宽中的较小者为边长。然后定义了窗口,定义的窗口是中心在原点,边长为 200 像素的正方形。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Windows本地启动Redis
  • Linux——管理本地用户和组(详细介绍了Linux中用户和组的概念及用法)
  • 上传项目到GitHub
  • 数据结构:二叉搜索树(简单C++代码实现)
  • 代码随想录day23 ||39组合总和1 40组合总和2 131分割回文串
  • dynslam的安装
  • 【GoF23种设计模式+简单工厂模式】
  • Perl 哈希
  • 计算机概述
  • github搜索指令
  • ElasticSearch(四)— 数据检索与查询
  • 失业潮下,有人靠天工AI做副业年入10万?
  • Modbus转BACnet/IP网关的技术实现与应用
  • Encountered 1 file(s) that should have been pointers, but weren‘t:
  • 数据结构与算法--顺序表(Java)
  • 【前端学习】-粗谈选择器
  • ECS应用管理最佳实践
  • iOS 颜色设置看我就够了
  • PhantomJS 安装
  • rabbitmq延迟消息示例
  • spring security oauth2 password授权模式
  • vue数据传递--我有特殊的实现技巧
  • Web标准制定过程
  • 爱情 北京女病人
  • 彻底搞懂浏览器Event-loop
  • 大整数乘法-表格法
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 新版博客前端前瞻
  • 译有关态射的一切
  • 因为阿里,他们成了“杭漂”
  • 用element的upload组件实现多图片上传和压缩
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 数据库巡检项
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (黑马C++)L06 重载与继承
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)插入排序
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .md即markdown文件的基本常用编写语法
  • .NET Core WebAPI中封装Swagger配置
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET大文件上传知识整理
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .net后端程序发布到nignx上,通过nginx访问
  • .NET中两种OCR方式对比
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • /bin/bash^M: bad interpreter: No such file or directory
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)