• 9973阅读
  • 8回复

关于Qtimer定时器的问题 [复制链接]

上一主题 下一主题
离线jackyjun
 
只看楼主 正序阅读 楼主  发表于: 2006-05-11
我做了一个仪器界面,需要在界面上画出一组随即波形,为了呈现一种动态的形式,加了一个定时器定期的repaint,可是问题是,无论我怎么设置定时器的start(),程序实际运行的结果,我发现都是一秒钟重画一次。我用的是qt-2.3.7,硬件平台是arm9的s3c2410。
把部分代码贴出来,希望大家指点迷津,谢谢大家!
MyMainWindow::MyMainWindow()
{
   screentimer = new QTimer(this);
   setBackgroundColor(QColor(80,80,80));
   setBackgroundMode(NoBackground);
   setGeometry(0,0,320,240);
   setupbutton = new QPushButton("Setup",this);
   setupbutton->setGeometry(0,0,40,25);
   
   filebutton = new QPushButton("File",this);
   filebutton->setGeometry(41,0,40,25);
   
   resultbutton = new QPushButton("Result",this);
   resultbutton->setGeometry(82,0,40,25);
   
   helpbutton = new QPushButton("Help",this);
   helpbutton->setGeometry(123,0,40,25);
   
   connect(screentimer,SIGNAL(timeout()),this,SLOT(repaint()));
   screentimer->start(50);
   
}

void MyMainWindow::paintEvent(QPaintEvent *)
{
   int i;
   int value;
   int bak_value=130;
   int w=this->width();
   int h=this->height();
   QPen exborderpen(blue,2,SolidLine);
    QPen inblankpen(black,1,DotLine);
   QPen datapen(cyan,1,SolidLine);    

   QPixmap pm(w,h);
   pm.fill(white);
   srand(time(NULL));
   QPainter paint(&pm);
   paint.setPen(exborderpen);
   paint.drawRect(8,30,304,200);
   
   paint.setPen(inblankpen);
   for(i=1;i<8;i++)
   {
       paint.drawLine(10,30+i*25,309,30+i*25);
   }
   for(i=1;i<12;i++)
   {
       paint.drawLine(10+i*25,30,10+i*25,229);
   }
   
   paint.setPen(datapen);
   for(i=0;i<299;i++)
   {
       value=rand()%50+105;
       paint.drawLine(10+i,bak_value,11+i,value);
       bak_value = value;
   }
   
   paint.end();
   QPainter painter(this);
   painter.drawPixmap(0,0,pm,0,0);
}
离线sbtree
只看该作者 8楼 发表于: 2009-06-19
在qt助手里面找到这样一句话,或许对你有用
Note that QTimer's accuracy depends on the underlying operating system and hardware. Most platforms support an accuracy of 1 millisecond, but Windows 98 supports only 55. If Qt is unable to deliver the requested number of timer clicks, it will silently discard some.
windows 7 + VC++2008 + Qt4.5.2
离线zealane

只看该作者 7楼 发表于: 2009-06-19
我也遇到定时器不准的问题。
离线nanhu_007

只看该作者 6楼 发表于: 2006-05-19
引用第5楼jackyjun2006-05-19 11:16发表的“”:
发现把定时器定时时间设置成screentimer->start(2000)时,波形就会2秒一刷新。设置成1秒以下的时间,波形还是按照1秒的周期刷新。这是为什么呢?请大家帮帮我吧!!

改成这样看可以不:
screentimer->start(1000);
在slot repaint()结尾再restart screentimer一下。
离线jackyjun
只看该作者 5楼 发表于: 2006-05-19
发现把定时器定时时间设置成screentimer->start(2000)时,波形就会2秒一刷新。设置成1秒以下的时间,波形还是按照1秒的周期刷新。这是为什么呢?请大家帮帮我吧!!
离线jackyjun
只看该作者 4楼 发表于: 2006-05-17
既然是以毫秒为单位,那么为什么我改为50的时候,刷新的速度还是1秒的时间呢?
后来我即使不作图,用drawText在界面上随机的显示字符串结果还是以一秒钟的速度出现。
难道Qtimer就不能更快一点了么?1秒的时间太慢了啊!
离线nanhu_007

只看该作者 3楼 发表于: 2006-05-16
引用第2楼jackyjun2006-05-16 09:00发表的“”:
楼上的,抱歉,我不是很明白你的意思,Qtimer的start()不都是以毫秒为单位的么?还请了解的朋友给我解释一下,谢谢!

是以ms为单位的。
离线jackyjun
只看该作者 2楼 发表于: 2006-05-16
楼上的,抱歉,我不是很明白你的意思,Qtimer的start()不都是以毫秒为单位的么?还请了解的朋友给我解释一下,谢谢!
离线shiroki

只看该作者 1楼 发表于: 2006-05-11
你这个50是50ms还是50s呢
--
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 字节
 
上一个 下一个