QT总结7-update坑

之前发现QT中的OpenGL初始化没有按照所想的进行,发现是因为没有调用初始化函数,当时调用了update,然而没有用。之后发现qt的update函数对OpenGL显示存在缺陷,如果使用updateGL函数又会产生未知错误,导致程序崩溃。但是在实际开发的过程中需要通过许多控件对OpenGL的图像进行更新显示,此时不能使用的update就成了很大的问题。我尝试了很多方法,包括使用updateGL,repaint等等方法,都没有达到希望的效果。

之后在查看OpenGL使用glut显示的时候发现glut采用的是消息循环,也就是一个无限循环不停的重新绘制,所以我尝试在QT中添加了一个计时器QTimer,在构造其中添加了以下代码

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(50);

运行后发现之前不刷新的问题得到了解决,虽然切换界面的时候发现有闪屏的现象,但是界面中的OpenGL显示已经可以正常显示。

还有一些文章写个关于QGraphicsView的刷新问题,此处我没有使用QGraphicsView。可能还有其他的解决方法,但是目前我只成功了这一个。

经过之后的测试得出,如果不是用timer进行刷新,则手动调用update()均没有作用,但是使用timer隔10毫秒进行第二次刷新的时候就可以正常显示。所以推断刷新需要一定时间间隔,如果连续调用update时间间隔太短update不起作用。update本身不会直接重绘,有时需要调用多次update才能完成一次重绘,连续调用update也会导致失灵。

update刷新子控件的时候,会将刷新命令加入队列,然后等到回到主线程进行绘图的时候才会调用,个人推测update需要一定的时间间隔,不论使用sleep或者timer,只要满足了时间间隔的需要就可以正常绘制图像。

这里的新解决可以查看 Qt——无法实时刷新问题,这里面的内容可以解决。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值