• 5424阅读
  • 6回复

[提问]QTimer定时器的问题 [复制链接]

上一主题 下一主题
离线jzy89
 
只看楼主 倒序阅读 楼主  发表于: 2011-06-21
现在在设计一个界面,其中一个功能是 按下 “启动”按钮后,spinBox的值(初始值为0)按定时器每100ms 加1,加到99后,设置标识符 flag=false,然后手动改变spinBox的值为0,再按下“启动”按钮后,发现程序虽能运行,但定时器的信号发射间隔却变短了,“启动”越多次,定时器跑得越快,这是为什么呢??是因为定时器没有停止,两个叠加起来了???请大家指点指点。谢谢~

部分程序代码如下:


void Dialog::on_start_clicked()          //启动按钮
{   flag=true;  // flag为全局变量
    QTimer *x = new QTimer(this);
    //新建定时器
    if(x->isActive())
     {x->stop();}
    connect(x,SIGNAL(timeout()),this,SLOT(valueChange()));
    //关联定时器计满信号和相应的槽函数
    x->start(100);
    //定时器开始计时,其中100表示100ms即0.1秒

}
void Dialog::valueChange()
{
  lo_1=ui->spinBox->value();
//lo_1为全局变量,用来获取spinBox的值
  int o=lo_1;
   if(o<99&&flag==true){
   o++;
   ui->spinBox->setValue(o);
}
  else{flag=false;}
}

离线dbzhang800

只看该作者 1楼 发表于: 2011-06-21
你这不叫启动多次,这叫创建多个。
离线jzy89
只看该作者 2楼 发表于: 2011-06-21
回 1楼(dbzhang800) 的帖子
谢谢你的回复。那应该如何实现只创建一个定时器,却可以重复使用呢?  我把创建定时器的语句写在构造函数中,然后把定时器的启动语句 写在“启动”按键触发的函数中时,按下启动按钮,整个程序就会异常退出??  请指点指点。谢谢!
离线guuyan

只看该作者 3楼 发表于: 2011-06-21
void Dialog::valueChange()
{
  lo_1=ui->spinBox->value();
//lo_1为全局变量,用来获取spinBox的值
  int o=lo_1;
   if(o<99&&flag==true){
   o++;
   ui->spinBox->setValue(o);
}
  else{
        flag=false;
       //在这里销毁定时器就好了
       //killTimer(timerId);
   }
}
离线jay8830095
只看该作者 4楼 发表于: 2011-06-22
在不断的变化
离线jzy89
只看该作者 5楼 发表于: 2011-06-22
回 3楼(guuyan) 的帖子
这个方法我有试过,但在那里销毁定时器的话,变量加到99后,程序就自动退出了。
离线jzy89
只看该作者 6楼 发表于: 2011-06-22
我找到了解决办法。就是 把定时器的创建、关联和启动写在构造函数中,然后两个函数改成如下:



void Dialog::on_start_clicked()          //启动按钮
{  
   flag=true;  // flag为全局变量
}



void Dialog::valueChange()
{
  lo_1=ui->spinBox->value();
//lo_1为全局变量,用来获取spinBox的值
  int o=lo_1;
   if(o<99&&flag==true){
   o++;
   ui->spinBox->setValue(o);
}
  else{flag=false;}
}

这样改后,程序就可以正常运行了。谢谢大家对这个问题的关注以及指导!
快速回复
限100 字节
 
上一个 下一个