Qt界面——闪烁

一、使用setUpdateEnabled

二、在主线程中刷新

 

场景一:一个scroll窗口里面有很多preview窗口,preview窗口在播放内容。拖动scroll滑动块的时候,preview播放内容发生闪烁。

解决办法:

尝试了用本身的Scroll方法,以及用QScrollArea来代替都没有取得很好的成果。主要记录如下:

a..在窗口总高度没有超过可视高度时,无论使不使用QScrollArea都不会闪烁(没有滑动,长度不够)。

b. update()和repaint调用的paintEvent中的确有可能造成闪烁,但是在这里,paintEvent几乎没有做什么操作,

    屏蔽了里面的操作也还是没有解决问题。

c. 不论是使用QScrollArea还是不使用,把画布高度调成sumheight,甚至比sumheight还高的情况下还是会闪烁。

d. 在preview窗口中自己绘制了彩条,在滑动滚动条的时候不会闪烁。

e. 把preview的背景色设置为透明还是闪烁。且将AutoFillBackgound属性设为false还是闪烁。

最后给出的建议是强制不刷新,setUpdateEnabled,然后经过适当的处理之后,现在满

足需求,没有闪烁了。应该是scroll的时候Qt内部会进行重绘,不仅仅是代码中自己

写的paintEvent,而是系统自己的背景处理。

 

场景二:研究preview窗口时码停止刷新的问题。

做了以下方面测试:a. 在下方菜单栏中放两个label,让其同样进行时码刷新。并且打日志记录通道窗口接受到的时码信息。结果是

   一直都在接收数据,菜单栏的label也在刷新,只是通道窗口的时码不刷新。 b.为了避免是通道窗口的其他设置造成的,暂时屏蔽通道窗口外面的框框、标题栏过长的判断、

   preview窗口进制刷新判断这几点,依然是会停止刷新。 c.测试是不是通道窗口本身的结构问题,就不从底层接受时码,其他操作都不做,就用一个定时器不断发时间让他

  刷新,也会出现时码不刷新,只有在切换窗口或点击其他父窗口时才会刷新一次。网上找了一些类似现象的解决方案,包括重写showEvent以及增加repaint都不能解决这个问题。

  最终将刷新线程放到主线程,时码刷新才不会停掉。

  这个问题主要是我在一个子线程里面一直接受数据,生成时码,调用控件的setText来更新界面。这里面没有update,但是我估计setText这个函数里面应该也是调用了update来刷新的。放在主线程里面的刷新,我采用的方法主要是在子线程里面发送一个信号出来,在主线程里面接收这个信号,并在主线程的槽函数里面进行setText刷新时码。
我这个问题和这个博文里面很像:频繁调用update()若干时间后无法自动重绘界面的问题     解决办法都是在主线程刷新。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值