QT中窗口-与视口的转换
来源:互联网 发布:你可能需要与该网络isp 编辑:程序博客网 时间:2024/05/16 12:32
在QPainter中存在两个函数,分别是setWindow和setViewPort,分别用来设置绘图窗口和绘图的视口。
首先要说明的是,这个窗口和视口和可能和其它地方说明的窗口和视口含义不一样;另外,在《C++ GUI Qt4编程》一书中也没用很详细的讲解这两个概念。所以笔者经过测试,把相关知识描述如下:以在QWidget中绘图为例,QWidget大小(600,600)。Qt绘图时,如果不显式的指定窗口和视口,默认的窗口和视口都是(0,0,widget.width(),widget.height())。那么窗口-视口变换过程中的线性关系是X' = X;Y' = Y;其中(X,Y)是窗口中的坐标,(X',Y')是视口中的坐标。那么此时绘制的图形是以一个不变的关系绘制在QWidget上,没有任何的平移等效果。
如果使用setWindow(-300,-300,600,600)和setViewPort(-100,-100,600,600)之后呢,那么这个窗口-视口的线性关系则需要重新计算了,怎么计算?
设X'=aX+b;Y'=cY+d; 那么需要确定参数a,b,c,d。如何确定?
使用窗口坐标和视口坐标进行计算,在窗口(-300,-300,600,600)中,实际上是指定了窗口的两个坐标,左上角(-300,-300),右下角(300,300);在视口(-100,-100,600,600)中,指定了视口左上角坐标(-100,-100),视口右下角(500,500).根据左上角对应左上角,右下角对应右下角的关系,得到:x方向上有:-100=-300a+b,500=300a+b,解得a=1,b=200;y方向有:-100=-300c+d,500=300c+d,解得c=1,d=200。 得到关系后再来绘图则是经过该关系变换后的值了。
比如painter.drawPoint(0,10),对应x=0,得到x'=0*a+b=200;对应y=10,得到y'=10*c+d=210;即实际上是在widget的(200,210)处绘制了一个点。
Polyline和Polygon的区别是什么啊?Polygon能画封闭的多边形,而Polyline不会首尾自动相连,形成封闭的图形
- QT中窗口-与视口的转换
- Qt窗口与视口坐标转换
- Qt中父窗口与子窗口之间的关系
- Qt中父窗口与子窗口之间的关系
- OpenCV与Qt 中图像格式的转换
- VC++中屏幕坐标与窗口坐标的转换
- QT中Unicode编码与字符串之间的转换
- QT中Unicode编码与字符串之间的转换
- QT中Unicode编码与字符串之间的转换
- 【引用】Qt中发送与接收信息的编码转换
- Qt中QString与int和double类型的转换
- QT中QString与数字类型的转换
- Qt中QString与基本类型的转换问题
- Qt中QString与数字类型的转换方法
- Qt中GB编码与UTF8编码的转换
- QT中QString与数字类型的转换
- Qt中 Qstring 与QbyteArray的互相转换
- QT窗口与视口(window&ViewPort)的关系,言简意赅的表达。
- Asp.Net完整实现网页保存为图片代码
- 安装MySQL 5后无法启动(不能Start service)解决方法小结
- JS只能输入数字,数字和字母等的正则表达式
- Arrays.asList方法总结 && Android控件中文粗体的使用
- linear Decoder (线性自动稀疏编码)
- QT中窗口-与视口的转换
- mybatis 开发环境搭建
- wcf abc开发4
- eclipse.exe无法运行
- javascript实现 1,2,3,4,5,6,7,8,9倒序(用递归),并放入一个数组中
- Routing Algorithms
- NSRunLoop
- 扁平化设计的前世今生
- wcf abc开发5