每日一笔记之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。

时间: 2024-10-17 11:55:56

每日一笔记之2:QT之坐标系统:的相关文章

【iOS开发每日小笔记(十)】自制带圆框的头像 利用在CALayer设置“寄宿图”

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 在上一篇文章中,我详细地回顾.复习了Core Graphics框架中利用Quartz 2D来绘制各种各样的图形,其实这些绘图就是绘制到了UIView的CALayer层上.这次,受到另一篇博文(http://

【iOS开发每日小笔记(九)】在子线程中使用runloop,正确操作NSTimer计时的注意点 三种可选方法

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习. 一直想写一篇关于runloop学习有所得的文章,总是没有很好的例子.正巧自己的上线App Store的小游戏<跑酷好基友>(https://itunes.apple.com/us/app/pao-k

【iOS开发每日小笔记(五)】实测copy到底是个神马玩意

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,太碎片,则可以有两个选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在本文的评论

【iOS开发每日小笔记(十二)】仿Facebook登录界面 错误提示抖动 利用CAAnimation设置动画效果

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 原本以为国庆假期可以有时间看看书,写写博客.实际上大部分时间都被赶场参加婚礼和到处去亲戚家串门吃饭所占用.眼看明天还剩最后一天时间,今天赶紧来更新一篇,也算是没有完全荒废这7天长假吧! Facebook的客

【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 测试组的小伙伴们大显神威,iOS8刚发布,他们就把测试设备急速升级了,然后就是扑面而来的各种bug和他们各种幸灾乐祸的笑.没办法,老老实实修复bug! 来看看今天我遇到的一个问题: 项目中,我将一个简化的H

【iOS开发每日小笔记(四)】iOS 7中如何除去UIAlertView 规避delegate对象销毁后接收消息的crash

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,太碎片,则可以有两个选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在本文的评论

【iOS开发每日小笔记(一)】UIPickerView 自动选择某个component的某个row

从这篇文章开始我将会把每天在开发过程中遇到的,可以用很短的文章.很小的demo演示解释出来的小心得小技巧,分享在[iOS开发每日小笔记]这个分类中.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们会给用户体验.代码效率得到一些提升,记录在这里,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,可以选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在本文的评论里狠狠吐槽,再关掉页面!感谢! 今天在项目中遇到这样一个小问题:我使用UI

转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

http://www.bubuko.com/infodetail-382485.html 这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 测试组的小伙伴们大显神威,iOS8刚发布,他们就把测试设备急速升级了,然后就是扑面而来的各种bug和他们各种幸灾乐祸

【iOS开发每日小笔记(十三)】使用UIDocumentInteractionController 打开ibooks文档的注意点

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.90%的作用是帮助自己回顾.记忆.复习. 大约两年多前,我曾尝试自己写一个程序,用来解析Word文档.当时满腔热血,认为只要是把xml各种标签一一对应解析就好了(当时还不知道有CoreText这档子东西).后来发现自己实力不够,在解析了图片.文字.

【iOS开发每日小笔记(三)】利用iOS7 UIKit Dynamics 仿Zaker客户端首页动态效果

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下(^_^).其实,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,太碎片,则可以有两个选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在