Qt中绘图坐标QPainter,Viewport与Window的关系
在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映射。
Qt中绘图坐标QPainter,Viewport与Window的关系的更多相关文章
- Qt之图形(QPainter的基本绘图)
简述 Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类. QPainter用来执行 ...
- Qt 中QPainter 使用中出现的问题
这两天在使用QPainter的过程中出现了一些问题,记录一下. 测试程序很简单,写一个继承自QWidget的类,重载其paintEvent函数进行绘图. case1: 在paintEvent函数中使用 ...
- Qt 2D绘图之四:绘图中的其他问题
一.重绘事件 前面讲到的所有绘制操作都是在重绘事件处理函数paintEvent()中完成的,是QWidget类中定义的函数.一个重绘事件用来重绘一个部件的全部或者部分区域,下面几个原因中的任意一个都会 ...
- 关于Qt中窗口的坐标
主要是给自己以后参考,所以不会太仔细的讲解. #include "mainwindow.h" #include <QApplication> #include<Q ...
- Qt 2D绘图之二:抗锯齿渲染和坐标系统
一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且 ...
- qt 2D绘图技巧
2D绘图 Qt4中的2D绘图部分称为Arthur绘图系统.它由3个类支撑整个框架,QPainter,QPainterDevice和QPainterEngine.QPainter用来执行具体的绘图相关操 ...
- Qt中截图功能的实现
提要 需求:载入一张图片并显示,能够放大缩小,能够截取图片的某个矩形并保存. 原以为蛮简单的一个功能,事实上还是有点小复杂. 最简单Qt图片浏览器能够參考Qt自带的Demo:Image Viewer ...
- Qt中常用知识点
1:QRegExp 正则表达式 QRegExp regExp("[a-zA-Z][1-9][0-9]{0,2}"); xxx->setValidator(new QRegEx ...
- QT中的小细节
一 . QT4和QT5的区别(信号和槽):1. QT4: connect(button,SIGNAL(pressed()),this,SLOT(close())); /** * 优点 :写法简单 ...
随机推荐
- Linux&shell 之Shell命令进阶
写在前面:案例.常用.归类.解释说明.(By Jim) 监控程序a.进程查看ps -ef(-e表示系统上运行的所有进程,-f用于扩展输出一些有用的信息列.)ps -efH(-H参数可以将进程组织为分层 ...
- eclipse中的项目导出成Androidstudio的识别的项目,so文件打包不进去
需要加入jniLibs.srcDirs = ['libs']才可以把so文件打入包内 sourceSets { main { manifest.srcFile 'AndroidManifest.xml ...
- Using Apache Web Server with Jboss AS 7
In real-world projects, it's common to find Apache web server as a front door to your application se ...
- kNN
传统的kNN模型 为了获得用户对产品的评分预测值,kNN模型一般包括以下三步: 1.计算相似度 这步中计算每对产品之间的相似度 Person correlation: \[S _ {mn} ^{P} ...
- [Locked] Count Univalue Subtrees
Count Univalue Subtrees Given a binary tree, count the number of uni-value subtrees. A Uni-value sub ...
- poj 1631 LIS
题目链接:http://poj.org/problem?id=1631 #include <cstdio> #include <cstring> #include <io ...
- 终止imp/exp和expdp/impdp进程运行的方法
一.停止EXP/IMP优化速度 可以直接KILL 进程,但先要KILL 父进程,然后KILL子进程,只KILL子进程,EXP/IMP还会在后台执行的 样例:ps -ef |grep imp 查询到pi ...
- [PWA] 9. Service worker registerion && service work's props, methods and listeners
In some rare cases, you need to ask user to refresh the browsser to update the version. Maybe becaus ...
- 开发Mhealth(即:Mobile Health 移动医疗)应用必知的10个掘金点
近 日,著名移动技术咨询公司Research2Guidance发布了最新版的<移动医疗应用开发者经济>报告.在过去的两年半里,iOS和Android 两大主流移动平台上的移动医疗应用(以下 ...
- win7 32/64bit VS2010 OpenCV 2.4.9 环境配置
作者 : 卿笃军 因为近期人脸识别须要用到OpenCV,让我開始了OpenCV学习. OpenCV 2.4.9下载地址:http://sourceforge.net/projects/opencvli ...