业务逻辑很简单,就是收到udp数据后,更新绘图参数,然后执行绘图。最开始试过用定时器触发,发现定时器触发容易受到Ui操作事件的影响,导致图像绘制刷新速率肉眼可见的不同。再提高定时器的精确率之后,刷新速率问题有所缓解。但是仍感觉不够流畅,因此在非GUI线程中做如下实现。
while(1)
{
update();
usleep(5000);
}
运行一段时间后,即如标题所说,界面卡死,但是其他空间响应操作正常,拖动大小,仍可绘制。
经查证后,发现UI操作一定要在UI线程中,否则会出现问题。
所以这里利用槽函数的机制来实现,槽函数最后执行是在主线程中的,那么只需要在线程中不断发出信号即可。
while(1)
{
emit sig_update();
}
connect(this,SIGNAL(sig_update()),this,SLOT(slot_update()));
经测试后不会出现界面卡死现象。