• 10184阅读
  • 4回复

QT 显示 如何减轻闪屏 [复制链接]

上一主题 下一主题
离线blackdream2
 

只看楼主 正序阅读 楼主  发表于: 2008-09-06
— 本帖被 XChinux 执行加亮操作(2008-09-10) —
很多同志在些QT 程序后会遇见闪屏的问题, 有时速度非常快,但毕竟影响了显示效果,如何做到减轻屏幕抖动或闪屏呢?
我曾试过如下的办法:
1.使用双缓冲。 比如我们在一个Widget里面绘多个图的话, 先创建一个QPixmap对象 然后用QPainter在这个QPixmap对象上绘图,最用后BitBlt 将数据copy到active painterDev上就可以了。
2.QWdiget 对象在重绘的时候选择NoErase。 调用repaint(false)即可,  这样可以防止在绘图的时候 系统会先将整个Region 擦除,这样也可以避免闪屏。 但这个还不足以 去除闪屏,因为系统自己也会调用repaint函数,可能他会erase 需要绘图的QRegion区域, 因此要确保不擦除,需要在QWidget对象中设置WFlags: WRepaintNoErase 属性。 在QT3中 好像直接通过SetWFlags不会起作用,需要在QWidget构造函数中传入这个参数。
有人说或如果不擦除图片 会不会画面残留上次的绘图结果,  这个需要我们自己在绘图的时候做清除,因为是在QPixmap上绘图 并不影响系统中Active painterDev 所以 擦除不会引起屏幕闪烁。
离线oracle_lei
只看该作者 4楼 发表于: 2008-09-09
我上次看了下
QT在做图片处理的时候应该是把双缓冲封装起来le 
离线blackdream2

只看该作者 3楼 发表于: 2008-09-08
QT有些类可能使用了双缓冲技术,但实际上如果是我们自己在一个QWidget中绘图的话还得自己来实现,至少QT3是这样。QT4的代码没看过。
离线mumutouv

只看该作者 2楼 发表于: 2008-09-07
像一些QImage等等都自动使用双缓冲技术了,你以为是MFC阿
离线suraid
只看该作者 1楼 发表于: 2008-09-06
QT现在貌似已经做双缓冲了
SuRaid团队主要承接嵌入式、Web、美工、算法设计等业务

团队网址: http://www.suraid.cn
团队博客: http://blog.suraid.cn
团队邮箱: bbs@esuraid.com
快速回复
限100 字节
 
上一个 下一个