【Qt】2D绘图之绘图中其它问题 怼烎@ 2022-11-12 14:57 203阅读 0赞 ## 00. 目录 ## ### 文章目录 ### * * 00. 目录 * 01. 概述 * 02. 开发环境 * 03. 重绘事件 * 04. 剪切 * 05. 播放gif动画 * 06. 渲染SVG文件 * 07. 附录 ## 01. 概述 ## ## 02. 开发环境 ## **Windows系统**:Windows10 **Qt版本**:Qt5.15或者Qt6 ## 03. 重绘事件 ## 前面讲到的所有绘制操作都是在重绘事件处理函数paintEvent()中完成的,是QWidget类中定义的函数。一个重绘事件用来重绘一个部件的全部或者部分区域,下面几个原因中的任意一个都会发生重绘事件: * repaint()函数或者update()函数被调用; * 被隐藏的部件现在被重新显示; * 其他一些原因。 大部分部件可以简单地重绘它们的全部界面,但是一些绘制比较慢的部件需要进行优化而只绘制需要的区域(可以使用QPaintEvent::region()来获取该区域)。Qt也会通过合并多个重绘事件为一个事件来加快绘制,当update()函数被调用多次,或者窗口系统发送了多个重绘事件,那么Qt就会合并这些事件成为一个事件,而这个事件拥有最大的需要重绘的区域。 update()函数不会立即进行重绘,要等到Qt返回主事件循环后才会进行,所以多次调用update()函数一般只会引起一次paintEvent()函数调用。而调用repaint()函数会立即调用paintEvent()函数来重绘部件,只有在必须立即进行重绘操作的怡况下(比如在动画中),才使用repaint()函数。update()允许Qt优化速度和减少闪烁,但是repaint()函数不支持这样的优化,所以建议一般情况下尽可能使用update()函数。还要说明一下,在程序开始运行时就会自动发送重绘事件而调用paintEvent()函数。另外,不要在paintEvent()函数中调用update()或者repaint()函数。 当重绘事件发生时,要更新的区域一般会被擦除,然后在部件的背景上进行绘制。部件的背景一般可以使用setBackgroundRole()来指定,然后使用setAutoFillBackground(true)来启用指定的颜色。例如使界面显示比较深的颜色,可以在部件的构造函数中添加如下代码: this->setBackgroundRole(QPalette::Dark); this->setAutoFillBackground(true); ## 04. 剪切 ## QPainter可以剪切任何的绘制操作,可以剪切一个矩形、一个区域或者一个路径中的内容,这分别可以使用setClipRect()、setClipRegion()和setClipPath()函数来实现。剪切会在QPainter的逻辑坐标系统中进行。下面的代码实现了剪切一个矩形中的文字: QPainter painter; painter.setClipRect(10, 0, 20, 10); painter.drawText(10, 10, tr("Hello Qt")); ## 05. 播放gif动画 ## QMovie类是使用QlmageReader来播放动画的类,使用它可以播放不带声音的简单的动画,它支持gif和mng文件格式。这个类提供了很方便的函数来进行动画的开始、暂停和停止等操作。可以参考该类的帮助文档,也可以查看一下Movie Player示例程序,它在Widgets分类中。 ## 06. 渲染SVG文件 ## 可缩放矢量图形(Scalable Vector GraphiCS,SVG)是一个使用XML来描述二维图形和图形应用程序的语言。在Qt中可以使用QSvgWidget类来很容易地加载一个SVG文件,而使用QSvgRenderer类在QSvgWidget中进行SVG文件的渲染。这两个类的使用很简单,这里就不再讲述。可以参考一下SVG Generator和SVG Viewer示例程序,它们都在Painting分类中 ## 07. 附录 ##
相关 Qt实现2D绘图 一、介绍 Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于`QPainter`、`QPaintDevice`和`QPaintEn 太过爱你忘了你带给我的痛/ 2024年04月08日 09:36/ 0 赞/ 77 阅读
相关 【Qt】2D绘图之双缓冲绘图 00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制矩形 04. 青旅半醒/ 2022年11月13日 00:48/ 0 赞/ 225 阅读
相关 【Qt】2D绘图之涂鸦板 00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 程序设计(基本功能) Dear 丶/ 2022年11月12日 15:59/ 0 赞/ 182 阅读
相关 【Qt】2D绘图之绘图中其它问题 00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 重绘事件 04. 怼烎@/ 2022年11月12日 14:57/ 0 赞/ 204 阅读
相关 【Qt】2D绘图之绘制图片 00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 简单绘制图片 04 - 日理万妓/ 2022年11月12日 10:58/ 0 赞/ 225 阅读
相关 【Qt】2D绘图之绘制路径 00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制简单路径 04 男娘i/ 2022年11月12日 10:52/ 0 赞/ 322 阅读
相关 【Qt】2D绘图之坐标系统 00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. Qt坐标系统 04 约定不等于承诺〃/ 2022年11月12日 09:52/ 0 赞/ 217 阅读
相关 【Qt】2D绘图之渐变填充 00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 线性渐变 04. 刺骨的言语ヽ痛彻心扉/ 2022年11月12日 09:45/ 0 赞/ 234 阅读
还没有评论,来说两句吧...