【Qt】2D绘图之绘图中其它问题
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绘图之二:抗锯齿渲染和坐标系统
一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且 ...
- Qt 2D绘图功能简单总结
文章目录 Qt 2D绘图功能简单总结 Qt 2D绘图功能简单总结 Qt 的绘图功能非常强大,它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,还可以用来绘制文本和图片. Qt的绘图系统 ...
- Qt 2D绘图(5):绘制图像基础
Qt 2D绘图(5):绘制图像基础 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文出自本人原创著作<Qt5.10 GUI完全参考手册>网盘地址: ht ...
- QT技术应用_2D绘图(转)
QT技术应用_2D绘图(转) 分类: 与企业共成长 2011-06-03 13:02 6170人阅读 评论(0) 收藏 举报 qt图形存储postscript框架windows http://www. ...
- CREO:CREO软件中如何设置和使用各种标准模板文件(asm组件模板、drw工程图模板、prt零件模板)、零件模板的定制、创建零件自动产生绘图、绘图模板的定制之详细攻略
CREO:CREO软件中如何设置和使用各种标准模板文件(asm组件模板.drw工程图模板.prt零件模板).零件模板的定制.创建零件自动产生绘图.绘图模板的定制之详细攻略 目录
- 【Matlab 绘图——持续补充中】
Matlab 绘图--持续补充中 目录 plot() 函数 常用线型.颜色.symbol loglog,semilogx,semilogy,plotyy 图片完善--标题title,坐标轴名称xlab ...
- 计算机绘图 概念性知识点,中职计算机绘图(建筑CAD)课程的工学一体课型实践与分析...
许灵钰 随着现代计算机技术的快速发展,电脑制图已经逐渐替代以前的手工制图.对于建筑相关专业的学生来说,计算机绘图是一门非常重要的专业基础课.扎实的CAD绘图能力已经是学生毕业后参加建筑相关工作的一项非 ...
- Qt 2D painting Demo 的翻译
目录名字 Qt 2D painting Demo 的翻译 Helper Class 定义 Helper Class 的实现 Widget Class 定义 Widget Class 实现 GLWidg ...
- MATLAB SCI论文绘图及绘图窗口大小设置
简介 为了满足各种期刊杂志尤其SCI的出版要求,高品质的论文插图能够让读者赏心悦目,增加论文的可阅读性.在作图时候,根据论文的布局.插图位置决定着图的长宽.分辨率和字体大小.如果不考虑图片在论文中的大 ...
- EGE绘图之一 绘图讲解
EGE专栏:EGE专栏 下一篇:EGE绘图之二 窗口刷新 目录 1.1 绘图初始设置 1.2 帧循环 1.2.1 包含动画的程序简略结构 1.3 视觉暂留现象 1.4 清屏 1.4.1 部分清屏 1. ...
最新文章
- liunx 分割合并文件
- 2018ICPC-ACM XIAN Invitation Onsite
- 企业级UML/MDA工具Trufun 2007系列发布!
- 从近年CVPR看域自适应立体匹配
- [转]C++中的三种继承public,protected,private
- POJ 3696 欧拉函数+快速幂
- 计算机组成800H是多大,73计算机组成原理模拟题三(2019年)更新北理工20春答案...
- jmeter测试工具应用场景【测试帮日记公开课】
- python堆栈汉诺塔非递归_汉诺塔问题的递归解法和非递归解法(python语言实现)...
- mysql (mariadb)数据库使用 mysqldump 备份全部数据库,并自动按当前时间名保存文件
- FastDFS上传下载原理解析
- Ubuntu 18.04 安装Unity3d
- Saruman‘s Army
- 批量复制到花瓣网上图片素材的原图
- 【LWIP】LWIP协议|相关知识汇总|LWIP学习笔记
- 高可用架构的6大常规方案【转】
- 攻防世界MISC刷题1-50
- Leetcode刷题06-位运算
- 16 Three.js使用dat.GUI简化试验流程
- Elasticsearch:Aggregation 简介
热门文章
- xmanager 使用
- python库(2)—— threading
- MVC后台创建Json(List),前台接受并循环读取
- gVIM+ctags+Taglist+winmanager搭建IDE
- 逻辑地址、线性地址、物理地址和虚拟地址
- MFC 问题集(4)CListCtrl
- python3.7.2版本怎么安装ipython_Linux升级安装python2.7版本至python3.6版本,系统centos7...
- android 单例的作用,Android中单例模式的几个坑
- aliplayer 手机全屏控件不显示_Flutter 强大的MediaQuery控件
- java实现modbustcp通讯_Modbus TCP双通道冗余技术