• 4373阅读
  • 2回复

很奇怪的现象,求助 [复制链接]

上一主题 下一主题
离线jyxhappy
 
只看楼主 倒序阅读 楼主  发表于: 2010-02-03
编程目的:arm板上采1024个数,用这1024个数画线,等到arm上又采到1024个数后,刷新这条线,就这样子不断刷新。
我现在在程序中编写一段代码模拟获得这1024个数,并且不断的变化,使用repaint (FALSE); 或update();屏幕刷新会一会快一会慢,有的时候停下来了,一动鼠标又开始运行,诡异!我把代码贴出来大家帮我看看好吗,谢谢。


float aa[1024];
int f=100;//sin的频率从100开始
void C***::paintEvent(QPaintEvent *e)
{
    for (int ll=150; ll<250; ll++)//创建一个正弦波形,频率不断变化的
    {    
        for (int o=0; o<1024; o++)
        {
            aa[o]= sin(2*3.1415*f*o/1024/2.5);
        }
        f+=100;


        QPainter p(this);
            ........
            ........
            ........
        
            
        p.moveTo(0, aa[0]*转化系数);
        for(int j=0; j<1024; j++)
            p.lineTo(j, aa[j]*转化系数);
        
        usleep(100);
    }
}

离线318065268
只看该作者 1楼 发表于: 2010-02-05
usleep(100);
这个不要加。这个会导致整个应用程序进程在此终止100ms而非函数执行到这暂停。
而这种暂停会导致绘图事件处理队列内容忽多忽少吧。
用timer,connect(timer,SIGNAL(timeout()),this,SLOT(update());timer->start(100);
Email  rsail@126.com(私人邮箱)
QQ:   318065268
离线shiroki

只看该作者 2楼 发表于: 2010-02-05
别把计算放paintevent里, 这样是看不到曲线变化的, 因为这个paintevent要到下次进入事件循环的时候才能被调到, 这个中间过程不管变化了多少屏幕都不会有变化。
应该是在timer里去计算, 然后调 update。 计算也不能写死循环, 这样会占用cpu资源, 一样影响事件循环的正常进行。

还有个方法是自己主动调用 processEvents让事件被处理, 这个一般在绘图计算比较多而且无法避免的情况下用。
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
快速回复
限100 字节
 
上一个 下一个