• 5486阅读
  • 3回复

绘图死机问题 [复制链接]

上一主题 下一主题
离线jyxhappy
 
只看楼主 倒序阅读 楼主  发表于: 2010-03-10
生成一段正弦
/*---------    make sin wave---------- */    
    for (int ll=150; ll<250; ll++)
    {    
    for (int o=0; o<1024; o++)
    {
    Data[o]= sin(2*3.1415*f*o/1024/2.5);
    }
                     f+=100;
/*-------------------------------- */        
将Data[o绘制出来,然后调用repaint时程序不断重绘,    
    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), SLOT(animate()));
    timer -> start (40);

void CTime::animate()
{
    repaint (FALSE);
}

画出来了,但特别慢,鼠标都没法响应了,请问如何实现不死机的实时绘图
离线318065268
只看该作者 1楼 发表于: 2010-03-10
40毫秒重绘一次,这个间隔太小了。
画好了的就留在屏幕上了,只有当你的数据源内容改变的时候开始重绘就可以了。
Email  rsail@126.com(私人邮箱)
QQ:   318065268
离线benbenmajia

只看该作者 2楼 发表于: 2010-03-11
同lS,另外....提升机器硬件
安然.....
离线jyxhappy
只看该作者 3楼 发表于: 2010-06-03
问题已经解决,原因还是程序流程的问题,因为生成正弦的过程是在paintEvent中不停的循环的,每变化一次数据画一个,这是的程序一直在paintEvent中循环,无法响应其他消息了,好不容易循环完毕,又到了repaint (FALSE); 再次循环,所以肯定是没有时间反映其他的消息响应了。修改的办法是把生成正弦放到paintEvent外面,然后生成一次正弦,repaint (FALSE); 一次,这样可保证不再paintEvent中不停的循环,自然就可以响应其他鼠标键盘消息了。
快速回复
限100 字节
 
上一个 下一个