标题:6410板子QT画图
作者:1138455004
日期:2016-05-08 10:11
内容:
我开了个定时器,定时40或80等在一个IO输出脉冲,确实按这个定时间隔输出脉冲,但是当加入update代码,paintevent造成定时间隔拉长到200ms,特意试过,paintevent中无论画图耗时30ms还是干脆屏蔽全部代码只是个空函数,都造成定时间隔变长到200ms,且此时鼠标响应迟钝。另外有做了个按钮,进入后是while死循环翻转io,不加update 和QCoreApplication::processEvents()时io翻转很快,但是加了这两句,200ms才翻一次,如果不加QCoreApplication::processEvents(),界面鼠标不再响应。如何做到在定时器控制下的间隔刷屏更新绘图区?
#1 [never_forget 05-08 15:58]
用 QTest 的 qwait() 函数吧,效果应该还是可以实现得
#2 [1138455004 05-08 18:31]
图片说明下帖描述
#3 [1138455004 05-08 18:44]
上面右上是正常显示的图片,所有控件都显示出来,但是它240ms更新一次,左边是用示波器测量ARM板上一个IO,40ms时基,可以看出重复周期站6格,鼠标卡顿。但是我时基定时器定时间隔80ms。下图我把paintevent最后加了一句setUpdatesEnabled(FALSE);显示是白屏,但是点击中下方combobox后,图片显示了,控件是没显示的,此时下左显示IO观察的重复周期是80ms。鼠标流畅。在240ms中,我的刷屏只需要40ms,其他时候不知系统在干什么,一串脉冲变为低后代表代码在paintevent已经结束。在setUpdatesEnabled(FALSE)语句加上,所有控件不显示,并且白屏,只要combobox点中,才以80ms定时间隔输出脉冲串以及更新。
#4 [1138455004 05-08 18:59]
while (1)
{
WritePLL(1234);//包含有IO代码
MyProcess();//处理画图数据,画图实在paintevent中实现
BusProcess();
CSFPGAL();//IO代码
CSFPGALH);
update();
QCoreApplication::processEvents();
}
也试过上面这样死循环代码,如果不加update();和QCoreApplication::processEvents();
无法刷新,出现白屏,鼠标也不动。但是死循环中IO翻转代码执行频率很快,加上后正常显示,但是刷屏周期同样长达240ms,
这说明与所用定时器没关系,系统执行完刷屏后也没回到我死循环中。而是不知道在哪晃荡,连鼠标都不流畅。
#5 [caicaiking 05-10 09:14]
这样的绘图可能会拖累处理器的处理时间,建议你是用第三方控件绘图试一下,这样可能会改善你的绘图速度,从而让软件流畅运行。