一界面重载函数

使用方法:

1在头文件里定义函数

protected:

void paintEvent(QPaintEvent *event);

2 在CPP内直接重载

void ----------::paintEvent(QPaintEvent *)

{

//重载函数体

}

执行条件:界面有任何变动都会执行

特别:有时候会积累变化,既界面发生变化时不是立刻执行,可能几次变化合并为只执行一次。

如果要立即执行需要调用函数

详细使用见http://www.cnblogs.com/hnrainll/archive/2011/05/26/2057758.html(Len Chin博客总结,谢谢Len大侠做出这第细致的总结)

Qt paintevent事件

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

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()来获得属性值。

转自作者:Leo Chin出处:http://www.cnblogs.com/hnrainll/

http://blog.csdn.net/yh_1988/article/details/7196481

qt repaint 用法_Qt常用函数 记录(update erase repaint 的区别)相关推荐

  1. qt repaint 用法_Qt重绘之update,repaint详解

    Qt里面的重绘和Windows编程里面的重绘差不多.但是Qt的重绘更有特色,更加智能. 在讲之前,先说说paintEvent() paintEvent()是一个虚函数槽(slot),子类可以对父类的p ...

  2. qt repaint 用法_Qt重绘之update,repaint详解(转)

    Qt里面的重绘和Windows编程里面的重绘差不多.但是Qt的重绘更有特色,更加智能. 在讲之前,先说说paintEvent() paintEvent()是一个虚函数槽(slot),子类可以对父类的p ...

  3. qt repaint 用法_qt的update与repaint

    一直搞不明白,qt的update与repaint的区别.虽然文档上说得貌似很明了了.但是,不看看源码,用着用着就迷糊了.今天看了下下相关的源码,记下自己的一点心得的. 1.update到paintEv ...

  4. Qt QString类及常用函数功能详解

    QString 是 Qt 编程中常用的类,除了用作数字量的输入输出之外,QString 还有很多其他功能,熟悉这些常见的功能,有助于灵活地实现字符串处理功能. QString 存储字符串釆用的是 Un ...

  5. python中常用函数表_Python常用函数记录

    Python常用函数/方法记录 一. Python的random模块: 导入模块: import random 1. random()方法: 如上如可知该函数返回一个[0,1)(左闭右开)的一个随机的 ...

  6. 算法移植优化(七)cmake常用函数记录

    由于cmake我一般是项目移植的时候,才会涉及到,一些常用函数隔一段时间就会忘记,所以在此做一下笔记,以便日后查看. 1.添加链接库所在的目录: link_directories("./li ...

  7. Excel常用函数记录

    文章目录 excel常用函数 1. 比较B2列是否在A列出现 2. 拼接过个单元格 3. 将时间戳转换成日期 4.截取单元格前几个字符 5.提取指定字符后的所有字符 6.删除单元格中隐藏的字符或非打印 ...

  8. XPath用法及常用函数

    目录 XPath简介 XPath语法 选取节点 谓语(Predicates) 选取未知节点 选取若干路径 XPath 轴 XPATH的几个常用函数 XPath简介 XPath (XML Path La ...

  9. qt repaint 用法_Qt 中update()和repaint()的区别

    void QWidget::repaint ( int x, int y, int w, int h, bool erase = TRUE ) [槽] 通过立即调用paintEvent()来直接重新绘 ...

最新文章

  1. 本地复制不能粘贴到服务上
  2. 姚氏百万富翁 混淆电路_姚氏混淆电路原理简介
  3. i2s传输中左右声道数据格式
  4. al-khaser 调试器,虚拟机检测工具
  5. 怎样自动提取邮件的内容_流程自动化和人工智能如何创建智慧物流?
  6. android surfaceview 清屏
  7. Using C++ in Eclipse - Program file not Specified problem
  8. apache.commons.beanutils javabean转MapStirng,String对象
  9. 大一c语言程序考试常考程序题,C语言程序常考题
  10. 用计算机清点木材的数量,木材检验员培训课件-木材出入库管理.ppt
  11. Android 自定义View实现拖动滑块完成验证
  12. 电脑开关电源维修图解
  13. 真彩色图像RGB,YIQ图像,HSV图像,YCbCr图像的相互转换(Matlab实现)
  14. 关于daemonize()
  15. JAVA好管家,一天一个shell命令 linux好管家-进程-ps命令详解
  16. HDOJ 2026 首字母变大写
  17. void指针(void *的用法)
  18. 字符串常量池,看这篇就够了(二)
  19. 华为无线设备配置静态负载均衡
  20. Django计算机毕业设计高校体育馆管理信息系统(程序+LW)Python

热门文章

  1. Android Makefile中inherit-product函数简介,以及与include的区别
  2. 湖北武汉电动机保护器公司哪家好_电动机保护器-上海硕吉电器_新浪博客
  3. 其实 家用计算机与普通计算机,拆解服务器,看看与普通计算机到底有什么区别?...
  4. 优化切尔诺贝利灾难模型——附matlab代码
  5. 七RabbitMQ队列、Redis
  6. java tr069_tr069cpe模拟器 针对tr069协议的客户端简单实现 - 下载 - 搜珍网
  7. oracle srvctl命令,用srvctl命令配置service
  8. 全网最稀缺的安卓工具资源APPMT管理+NP管理+云注入+云注入入口解密工具+Apk单机弹窗注入+小黄鸟+黑盒(32位)+黑盒(64位)+算法助手+mhook等等……
  9. java开发 使用scala_给Java开发者的Scala教程
  10. ORB-SLAM2源码阅读(1)