• 5991阅读
  • 4回复

关于减少闪烁的问题 [复制链接]

上一主题 下一主题
离线rqzrqh
 

只看楼主 倒序阅读 楼主  发表于: 2009-09-05

我用的是QT4.4以上的版本,LINXU下的
网上的一个例子
首先,要想把闪烁减弱,请设置组件的背景模式为NoBackground. setBackgroundMode(NoBackground); 其次,重载组件的paintEvent()函数,如下改写: void MyWidget::paintEvent(QPaintEvent *e) { QRect ur=e->rect();//得到组件尺寸 QPixmap pix(ur.size());//以此为参数创建一个位图变量 pix.fill(this,ur.topLeft());//填充位图 QPainter p(&pic);//以位图为参数创建一个QPainter 对象 p.translate(-ur.x(),-ur.y());//在QPainter 上绘画 //......//Drawing p.End();//绘画完毕 bitBlt(this,ur.topLeft().&pix);//把位图贴到组件上 } junglesong 整理 2004-1-24

虽然有注释,但是看得不是很懂,无法入手来重新写一个,而且04年的版本也太低了
比如这里的pic是哪个类也不清楚

http://doc.trolltech.com/qq/qq06-flicker-free.html也看过了,看得迷迷糊糊的

希望有人能帮我讲解一下这个例子的详细原理,或者提供一个QT4.4以上LINXU下的例子

离线rqzrqh

只看该作者 1楼 发表于: 2009-09-05
刚把论坛内以前关于闪烁的帖子看了一下,发现没有很好的解决闪烁的解决方法。

据说QT4以后QT自带了双缓冲机制,可是为什么闪烁还是明显呢,而且还是在PC机上。
http://labs.trolltech.com/blogs/2007/08/09/qt-invaded-by-aliens-the-end-of-all-flicker/有一篇从窗口管理器的角度来解决闪烁的方法,对attribute做了一些设置,绕过X11,感觉上确实有点快了,不过界面怎么多出了一些黑黑的东西。

设置了Qt::WA_paintOnScreen效果明显,可惜布局也被打乱了。

http://doc.trolltech.com/qq/qq06-flicker-free.html通过对闪烁产生的原因来解决问题。方法就是先计算,再擦除,再填充。但是现在的QT版本好像不能设置免擦除了。
离线dreamsfarm
只看该作者 2楼 发表于: 2009-10-30
遇到相同的问题,帮顶~~
离线huha2018
只看该作者 3楼 发表于: 2009-12-09
我看看!
离线rqzrqh

只看该作者 4楼 发表于: 2009-12-09
我现在的方法是用raise解决的,因为是一个应用程序,所以在PC机上会显示很多界面,但是实际上在板子上是没关系的。
另外,图片都是用setStyleSheet来设置的,不知道会不会和这个又关系,可能用QPixmap会减少闪烁。
快速回复
限100 字节
 
上一个 下一个