一.主要理解一下几个方法和属性:

1.QWidget * QScrollView::viewport () const

2.void QWidget::paintEvent ( QPaintEvent * ) [虚 保护]

3.void QWidget::repaint ( int x, int y, int w, int h, bool erase = TRUE ) [槽]

4.void QWidget::update () [槽]

5.void QWidget::erase ( int x, int y, int w, int h )

6.bool updatesEnabled

二.现分别详细介绍:

1.QWidget * QScrollView::viewport () const

返回滚动视图中的视口窗口部件,这个窗口部件包含内容窗口部件或者要画的区域。

2.void QWidget::paintEvent ( QPaintEvent * ) [虚 保护]

只要窗口部件需要被重绘就被调用。每个要显示输出的窗口部件必须实现它。这个事件处理器可以在子类中被重新实现来接收绘制事件。 它可以是repaint()或update()的结果。 很多窗口部件在当它们被请求时,它们很简单地重新绘制整个界面,但是一些窗口部件通过仅仅绘制被请求的区域QPaintEvent::region()进 行优化,例如,QListView和QCanvas就是这样做的。

Qt也可通过把多个绘制事件合并为一个来加快绘制速度。当update()被调用几次或者窗口系统发送几次绘制事件,Qt把它们合并为 一个比较大区域(请参考QRegion::unite())的一个事件中。repaint()不允许这样优化,所以只要可能我们尽量使用update ()。

当绘制事件发生,更新区域通常被擦除。这里有一些例外,通过QPaintEvent::erased()可以得知这个窗口部件是否被擦除。

3.void QWidget::repaint ( int x, int y, int w, int h, bool erase = TRUE ) [槽]

通过立即调用paintEvent()来直接重新绘制窗口部件,如果erase为真,Qt在paintEvent()调用之前擦除区域 (x,y,w,h)。 如果w是负数,它被width()-x替换,并且如果h是负数,它被height()-y替换。 如果你需要立即重新绘制,建议使用repaint(),比如在动画期间。在绝大多数情况下,update()更好,因为它允许Qt来优化速度并且防止闪 烁。 警告:如果你在一个函数中调用repaint(),而它自己又被paintEvent()调用,你也许会看到无线循环。update()函数从来不会产生 循环。

4.void QWidget::update () [槽]

更新窗口部件,当Qt回到主事件中时,它规划了所要处理的绘制事件。这样允许Qt进行优化从而得到比调用repaint()更快的速度和更 少的闪烁。 几次调用update()的结果通常仅仅是一次paintEvent()调用。 Qt通常在paintEvent()调用之前擦除这个窗口部件的区域,仅仅只有在WRepaintNoErase窗口部件标记被设置的时候才不会。

5.void QWidget::erase ( int x, int y, int w, int h )

在窗口部件中擦除指定区域(x, y, w, h),并不产生绘制事件。

如果w为负数,它被width()-x替换。如果h为负数,它被height()-y替换。

子窗口部件不被影响。

6.bool updatesEnabled

这个属性保存的是更新是否生效。

如果更新失效,调用update()和repaint()是没有效果的。如果更新失效,来自窗口系统的绘制事件会被正常处理。 setUpdatesEnabled()通常被用于在一小段事件内使更新失效,例如为了避免在大的变化期间发生屏幕闪烁。

实例:

setUpdatesEnabled( FALSE );

bigVisualChanges();

setUpdatesEnabled( TRUE );

repaint();

通过setUpdatesEnabled()设置属性值并且通过isUpdatesEnabled()来获得属性值。

Qt paintevent事件相关推荐

  1. QT的事件分发、事件过滤器详解

    一.事件的流向 QT的各种控件(QObject的子类)都有事件处理成员函数,例如: bool QObject::event(QEvent *e);//所有事件 dragEnterEvent(QDrag ...

  2. QT中事件及事件处理

    QT中事件及事件处理 什么是事件,事件与Qt中信号的区别? 个人所见: 事件是应用程序对内部或者外部的动作的统称. 信号是事件的后续响应通知 例如你点击了一个按钮,物理上的鼠标点击动作就是事件,而程序 ...

  3. Qt键盘事件实现图片在窗口上下左右移动

    Qt键盘事件实现图片在窗口上下左右移动 标签(空格分隔): 键盘事件 一.项目内容: 新建桌面应用程序testKeyEvent,类名KeyEvent,基类QWidget,通过重写键盘事件到达操作的键盘 ...

  4. QT mp3音乐播放器实现框架,Qt鼠标事件,网络编程,QSqlite,Json解析,HTTP请求等

    QT mp3音乐播放器实现框架,Qt鼠标事件,网络编程,QSqlite,Json解析,HTTP请求等 框架搭建 UI设计 mp3.h mp3.cpp 隐藏窗口标题 最大化 最小化 关闭 框架搭建 .p ...

  5. 8.QT的事件循环与事件发送相关类

    一.QT的事件发送类QCoreApplication QT使用QCoreApplication类为Qt程序提供了事件循环机制.该类继承QObject.QCoreApplication包含主事件循环,来 ...

  6. QT中事件发送函数sendEvent()、postEvent()详解

    Qt发送事件分为两种 -阻塞型事件发送 需要重写接收对象的event()事件处理函数 当事件发送后,将会立即进入event()事件处理函数进行事件处理 通过sendEvent()静态函数实现阻塞发送: ...

  7. QT消息/事件循环机制与多线程的关系

    关于Qt子线程和消息循环 一.QT消息/事件循环机制 Qt作为一个可视化GUI界面操作系统,是基于事件驱动的,我们程序执行的顺序不再是线性,而是由一个个应用程序内部或外部的事件进行驱动,无事件时便阻塞 ...

  8. Qt自定义事件实现及子线程向主线程传送事件消息

    近期在又一次学习Qt的时候,由于要涉及到子线程与主线程传递消息,所以便琢磨了一下.顺便把有用的记录下来,方便自己以后查询及各位同仁的參考! 特此声明,本篇博文主要讲述有用的,也就是直接说明怎么实现,就 ...

  9. resizeEvent , paintEvent事件触发原因

    一般触发paintEvent事件的有如下几种原因: 窗口显隐导致重画 窗口大小(重新调整)改变,或者重新排布(布局)导致重画 调用update 或者 repaint重画 当窗口第一次显示时,系统会自动 ...

最新文章

  1. Oracle Lsnrctl - 关于oracle监听器的命令和解释
  2. 五个方法成为更好的程序员
  3. AI:周志华老师文章《关于强人工智能》的阅读笔记以及感悟
  4. 【阿里云课程】如何从零开始完成第一个GAN项目
  5. python 消息队列 get是从队首还是队尾取东西_python分布式爬虫中消息队列知识点详解...
  6. Bootstrap条纹进度条
  7. python中函数的参数_Python小知识-Python中的函数参数(基础篇)
  8. 核心金融场景分布式事务
  9. wordpress中直接执行mysql查询语句的常用方法
  10. .net 中文语音朗读
  11. Atitit 知识体系概论 attilax著 三大类型 学术型 应用型 职业技术教育 1 附表1、CIP-2000学科群设置情况总表 1 三大层次 分类 学科 专业 2 20个知识大类 2 需
  12. 2011 年上半年软考5 月 信息系统项目管理师上午试题参考答案
  13. ologit模型与logit_Logit模型与logistic模型的联系与区别?
  14. Xilinx zynq zynqMP SD EMMC
  15. SAP(十)报表程序
  16. python-优矿-期权合成期货策略
  17. Java使用poi-tl生成word文档
  18. KepServerv设置为OPCUA通讯说明
  19. java 如何转化成机器指令_Java代码到底是如何编译成机器指令的
  20. 《Java SE实战指南》09:访问级别修饰符(Access level modifiers)

热门文章

  1. leetcode算法题--Lemonade Change
  2. exchange无法收发邮件_Python使用POP3和SMTP协议收发邮件!
  3. php: xampp安装对应的phalcon版本(3.2.2-php5.6):比如redis-php5.6, php_igbinary-5.6
  4. LRUCache 具体解释
  5. CTE 中字符串拼接
  6. Node.js 官方Path模块简介
  7. 查看每个表空间的使用率
  8. 销售员的四大重要素质
  9. 笑谈.Net的开发境界
  10. JAVA取数两个数组交集,考虑重复和不重复元素