每日一笔记之2:QT之坐标系统:
以前一直多单片机开发,也没怎么使用过大的显示器,第一次学习,备忘:
QT画图系统。
绘图,通过QPainter类实现。
Qt的绘图系统对底层函数进行了良好的封装,使得在屏幕和设备的绘图功能可能使用相同一致的API。绘图系统主要依据于QPainter,QPaintDevice和QPaintEngine三个类来实现的。QPainter表现绘图功能的操作,QPaintDevice作为可用QPainter绘制的二维空间的抽象,QPaintEngine提供了在不同设备上绘制图形的接口。QPaintEngine类其实被QPainter和QPaintDevice在内部调用,除非要自己创造另外的设备否则其对于程序员来说是隐藏的。这种设计方式的优点在于确保了所有的绘图操作遵循相同的流程,可以很容易的开发相应的功能特性来支持其它的设备类型。
用于表示绘图操作的类
QLine 在整数精度级别绘制二维直线
QLineF 在浮点数精度级别绘制二维直线
QMargins 表示一个矩形的四个外边距的值
QPoint 在整数精度级别表示平面上的一个点
QPointF 在浮点数精度级别表示平面上的一个点
QRect 在整数精度级别表示平面上的一个矩形
QRectF 在浮点数精度级别表示平面上的一个矩形
QSize 在整数精度级别表示一个二维对象的尺寸
QSizeF 在浮点数精度级别表示一个二维对象的尺寸
QSvgGenerator 可绘制SVG的图形设备
QSvgRenderer 载入SVG文件到图形设备
QSvgWidget 图形化显示SVG图形
QStylePainter 在控件中绘制QStyle元素
QColormap 关联设备无关的QColor与设备相关的像素值
QBitmap 单色位图
QIcon 可伸缩的图标,支持多种模式与状态
QIconEngine 用于渲染QIcon的抽象基类
QImage 图像的硬件无关表示,可存取像素数据,也可作为绘图设备
QImageReader 用于读取图像且与图像格式无关的接口
QImageWriter 用于保存图像且与图像格式无关的接口
QPixmap 图像的非屏幕表示,也可用作绘图设备
QGenericMatrix 表示N*M矩阵转换的模板类
QVector2D 二维空间向量
QBrush 表示图形的填充样式
QGradient 渐变填充样式
QLinearGradient 线型渐变
QRadialGradient 辐射渐变
QConicalGradient 锥型渐变
QColor 基于RGB,HSV和CMYK的颜色表示
QPagedPaintDevice 支持多页的绘图设备
QPaintDevice 可绘图对象的基类
QPaintEngine抽象定义QPainter如何在特定的平台上的绘图方式
QPainter 在控件和其它设备上绘图
QPainterPath 绘制操作的容器
QPainterPathStroker 在路径基础上生成实际的轮廓线
QPdfWriter 生成PDF
QPen 定义QPainter的线条样式
QPolygon 在整数精度级别表示多边形
QPolygonF 在浮点数精度级别表示多边形
QRegion 指定一个剪裁区域
QTransform 指定2D平面的坐标变换
QFont 指定用于绘制文本的字体
QFontMetrics 文字尺度信息
QFontMetricsF 文字尺度信息(浮点)
QSupportedWritingSystems 当使用Qt内部的字体数据库注册时使用
QPlatformFontDatabase 使自定义字体变成可能
绘图设备
QPaintDevice是所有可绘图设备的基类,也就是说QPainter可在任意的QPaintDevice的子类上进行绘图操作,像是QWidget,QImage,QPixmap,QPicture,QPrinter和QopenGLPaintDevice。
Widget
QWidget在QtWidgets模块中是所有用户界面元素类的基类,可以接收鼠标,键盘及其它系统信息并且绘制自身呈现在屏幕上。
Image
QImage提供了硬件无关的图像表示形式,极大简化了I/O与像素存取,支持单色,8位,32位和alpha透明图像。QImage的优点在于可以在不同平台确保像素的精确度,并且绘图过程是另外的线程而非当前GUI线程。
Pixmap
QPixmap提供了与屏幕无关的图像显示方式,简化了图像在屏幕上的呈现。与QImage不同的是,QPixmap的像素数据是被底层的操作系统管理的,只能通过QPainter函数来操作或者转化为QImage来操作。
Qt提供了QPixmapCache类来存储一些超出cache临时空间的图像。同时Qt提供了QBitmap子类来绘制单色图,主要用来构建自定义QCursor与QBrush对象及构建QRegion对象。
OpenGL PaintDevice
QOpenGlPaintDevice为QPainter提供了OpenGLAPI的支持,简化了OpenGL在Qt应用程序中的使用。
Picture
QPicture是用来记录与重现QPainter命令的绘图设备,将绘制命令连续的传递与IO设备与平台无关。同时QPicture也是与分辨率无关的,即可在不同设备(像svg,pdf,ps,printer和屏幕)显示相同的效果。QPicture::load()与QPicture::save()可用来实行图像的数据流操作。
CustomBackends
通过继承QPaintDevice实现其中的paintEngine()方法可自定义绘图功能,另外也必须继承QPaintEngine生成自定义的类来确保绘图功能的可行。
绘图与填充
绘图
QPainter提供了高度简化的GUI图形绘制操作函数,从绘制基本图元到复杂形状如矢量图形。
在Qt中矢量图形由QPainterPath来表示,其提供了绘图操作的容器,使得绘图操作得以重用。
QPen用来绘制线条与轮廓,画笔由其线条风格,宽度,画刷,终点风格,拐点风格等属性所定义。QBrush用来描述其填充图案。而且,QPainter也可绘制文本与图片。
通常情况下QPainter在默认的坐标系中,但也能够使用视口与世界变换来改变绘图与实际像素的坐标对应关系,坐标变换十分重要。
填充
填充风格通常由QBrush来定义,包括颜色与填充图案等。
在Qt中颜色由QColor来表示,可支持RGB,HSV和CMYK等模式,并且也支持alpha透明通道。最重要的是其平台无关性。
在Qt中在Qt::BrushStyle枚举变量中预定义了一些填充图案,从基本颜色到稀有图案,多样的结合线,线型填充与纹理。可参考QGradient与QPixmap。
Qt中每一个窗口都有一个坐标系,默认的,窗口左上角为坐标原点,然后水平向右依次增大,水平向左依次减小,垂直向下依次增大,垂直向上依次减小。原点即为(0,0)点,然后以像素为单位增减。
坐标系变换是利用变换矩阵来进行的,我们可以利用QTransform类来设置变换矩阵,因为一般我们不需要进行更改,所以这里不在涉及。下面我们只是对坐标系的平移,缩放,旋转,扭曲等应用进行介绍。
QPainter是以窗口坐标为基础的
窗口坐标为逻辑坐标,是基于视口坐标系的;视口坐标为物理坐标,是基于绘图设备坐标系的。
QPainter::setWindow()
,setWindow(-50,-50,100,100)
,设置窗口坐标,基于视口坐标设定,是个逻辑值,如果视口为200*200像素,窗口设置为100*100,那么窗口1个点表示2个像素。窗口代表的还是整个视口,但是映射的数值有所不同,这时候窗口的逻辑坐标(-50,-50)成为了视口坐标的(0,0),而窗口的逻辑大小成为了100×100的单位长度(这里用单位长度是因为窗口大小的长度并不固定,受视口大小影响),因为用100个单位长度代表原本物理大小的200像素,所以,每一个单位长度就是实际的2像素。因为QPainter是以窗口坐标为基础的,所以这时候画一个位置为(-50,-50),大小为 50,50的矩形。
painter.setViewPort(0,0,100,100);
设置视口的大小,是基于绘图设备的,意思是绘图设备的0,0作为视口的原点,大小为100*100像素。
所有的绘图设备都有自己的坐标系统,它们互不影响。
每日一笔记之2:QT之坐标系统:的更多相关文章
- 转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber
http://www.bubuko.com/infodetail-382485.html 标签:des class style 代码 html 使用 问题 文件 数据 ...
- Qt之坐标系统
简述 坐标系统是由QPainter类控制的,再加上QPaintDevice和QPaintEngine类,就形成了Qt的绘图体系. QPainter:用于执行绘图操作. QPaintDevice:二维空 ...
- QT入门学习笔记2:QT例程
转至:http://blog.51cto.com/9291927/2138876 Qt开发学习教程 一.Qt开发基础学习教程 本部分博客主要根据狄泰学院唐老师的<QT实验分析教程>创作,同 ...
- OpenGL学习笔记5——嵌入Qt框架
学习OpenGL也有段时间了,前几篇将GL最基本的画图过程解析了一下,后面进阶的就随项目需要再学.因为之前一直是用glut这个实用工具包来开发很方便,但是会附带一个控制台的窗口,实在觉得有些low,因 ...
- QT笔记之VS2010 Qt中导入qrc资源文件
转载1:http://qimo601.iteye.com/blog/1404693 转载2:http://blog.sina.com.cn/s/blog_92cde3060101lobm.html 转 ...
- 每日一笔记之3:QTconnect()
刚学习QT的时候,跟着教程做一些简答的实验,教程简单的界面使用UI文件,直接在界面上拖一个按键,在右键go to slot,在编写槽函数. 我以前没学过C++,一直以为这个自动跳转过去的slot函数是 ...
- OpenCV2学习笔记03:Qt中配置OpenCV环境
在Qt中开发基于OpenCV的应用时,需要配置对应函数库到环境变量,这时候我们需要使用到qmake能够识别的变量来指定环境变量. INCLUDEPATH: 用于指定搜索头文件到文件夹路径. LIBS: ...
- Qt 的坐标系统
QWidget *q = , Qt::WindowStaysOnTopHint); q->setWindowTitle(QObject::tr("父窗口widget")); ...
- QT学习笔记4:QT中GraphicsView编程
一.QGraphicsScene 1.QGraphicsScene QGraphicsScene继承自QObject,是一个管理图元的容器,与QGraphicsView合用可以在2D屏幕上显示如线.三 ...
随机推荐
- DBCP连接Oracle,数据库重启后现OALL8 is in an inconsistent state异常
最近,DBCP连接Oracle,数据库重启后现OALL8 is in an inconsistent state异常. 版本说明 commons-dbcp-1.4.jar commons-pool-1 ...
- c语言中函数调用的本质从汇编角度分析
今天下午写篇博客吧,分析分析c语言中函数调用的本质,首先我们知道c语言中函数的本质就是一段代码,但是给这段代码起了一个名字,这个名字就是他的的这段代码的开始地址 这也是函数名的本质,其实也就是汇编中的 ...
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
- 在HTML5规范中div中读取预存的data-[key]值
HTML 代码: <div id="div_test" data-test="this is test" ></div> jQuery ...
- #查找列表中元素,移除每个元素的空格,并查找以 a或A开头 并且以 c 结尾的所有元素
#!/usr/bin/env python #查找列表中元素,移除每个元素的空格,并查找以 a或A开头 并且以 c 结尾的所有元素. # li = ["alec", &quo ...
- BZOJ 1061 志愿者招募(最小费用最大流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1061 题意:申奥成功后,布布经过不懈努力,终于 成为奥组委下属公司人力资源部门的主管.布 ...
- Android-图片按钮汇总
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- Cheatsheet: 2013 11.01 ~ 11.11
Other Back To Basics: Hashtables – Part2 How To Make A Game Part 1:Picking a Framework Modern Garbag ...
- git push 403
1. 在github上新建一个空项目. 2. git clone 到本地仓库. 3. git add [一些文件]. 4. git commit -m "first commit" ...
- 个人简历制作(Dreamweaver)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...