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绘图之绘图中其它问题相关推荐

  1. Qt 2D绘图之二:抗锯齿渲染和坐标系统

    一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且 ...

  2. Qt 2D绘图功能简单总结

    文章目录 Qt 2D绘图功能简单总结 Qt 2D绘图功能简单总结 Qt 的绘图功能非常强大,它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,还可以用来绘制文本和图片. Qt的绘图系统 ...

  3. Qt 2D绘图(5):绘制图像基础

    Qt 2D绘图(5):绘制图像基础 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文出自本人原创著作<Qt5.10 GUI完全参考手册>网盘地址: ht ...

  4. QT技术应用_2D绘图(转)

    QT技术应用_2D绘图(转) 分类: 与企业共成长 2011-06-03 13:02 6170人阅读 评论(0) 收藏 举报 qt图形存储postscript框架windows http://www. ...

  5. CREO:CREO软件中如何设置和使用各种标准模板文件(asm组件模板、drw工程图模板、prt零件模板)、零件模板的定制、创建零件自动产生绘图、绘图模板的定制之详细攻略

    CREO:CREO软件中如何设置和使用各种标准模板文件(asm组件模板.drw工程图模板.prt零件模板).零件模板的定制.创建零件自动产生绘图.绘图模板的定制之详细攻略 目录

  6. 【Matlab 绘图——持续补充中】

    Matlab 绘图--持续补充中 目录 plot() 函数 常用线型.颜色.symbol loglog,semilogx,semilogy,plotyy 图片完善--标题title,坐标轴名称xlab ...

  7. 计算机绘图 概念性知识点,中职计算机绘图(建筑CAD)课程的工学一体课型实践与分析...

    许灵钰 随着现代计算机技术的快速发展,电脑制图已经逐渐替代以前的手工制图.对于建筑相关专业的学生来说,计算机绘图是一门非常重要的专业基础课.扎实的CAD绘图能力已经是学生毕业后参加建筑相关工作的一项非 ...

  8. Qt 2D painting Demo 的翻译

    目录名字 Qt 2D painting Demo 的翻译 Helper Class 定义 Helper Class 的实现 Widget Class 定义 Widget Class 实现 GLWidg ...

  9. MATLAB SCI论文绘图及绘图窗口大小设置

    简介 为了满足各种期刊杂志尤其SCI的出版要求,高品质的论文插图能够让读者赏心悦目,增加论文的可阅读性.在作图时候,根据论文的布局.插图位置决定着图的长宽.分辨率和字体大小.如果不考虑图片在论文中的大 ...

  10. EGE绘图之一 绘图讲解

    EGE专栏:EGE专栏 下一篇:EGE绘图之二 窗口刷新 目录 1.1 绘图初始设置 1.2 帧循环 1.2.1 包含动画的程序简略结构 1.3 视觉暂留现象 1.4 清屏 1.4.1 部分清屏 1. ...

最新文章

  1. liunx 分割合并文件
  2. 2018ICPC-ACM XIAN Invitation Onsite
  3. 企业级UML/MDA工具Trufun 2007系列发布!
  4. 从近年CVPR看域自适应立体匹配
  5. [转]C++中的三种继承public,protected,private
  6. POJ 3696 欧拉函数+快速幂
  7. 计算机组成800H是多大,73计算机组成原理模拟题三(2019年)更新北理工20春答案...
  8. jmeter测试工具应用场景【测试帮日记公开课】
  9. python堆栈汉诺塔非递归_汉诺塔问题的递归解法和非递归解法(python语言实现)...
  10. mysql (mariadb)数据库使用 mysqldump 备份全部数据库,并自动按当前时间名保存文件
  11. FastDFS上传下载原理解析
  12. Ubuntu 18.04 安装Unity3d
  13. Saruman‘s Army
  14. 批量复制到花瓣网上图片素材的原图
  15. 【LWIP】LWIP协议|相关知识汇总|LWIP学习笔记
  16. 高可用架构的6大常规方案【转】
  17. 攻防世界MISC刷题1-50
  18. Leetcode刷题06-位运算
  19. 16 Three.js使用dat.GUI简化试验流程
  20. Elasticsearch:Aggregation 简介

热门文章

  1. xmanager 使用
  2. python库(2)—— threading
  3. MVC后台创建Json(List),前台接受并循环读取
  4. gVIM+ctags+Taglist+winmanager搭建IDE
  5. 逻辑地址、线性地址、物理地址和虚拟地址
  6. MFC 问题集(4)CListCtrl
  7. python3.7.2版本怎么安装ipython_Linux升级安装python2.7版本至python3.6版本,系统centos7...
  8. android 单例的作用,Android中单例模式的几个坑
  9. aliplayer 手机全屏控件不显示_Flutter 强大的MediaQuery控件
  10. java实现modbustcp通讯_Modbus TCP双通道冗余技术