避免QTimer发出超时信号

避免QTimer发出超时信号,qt,qtimer,Qt,Qtimer,我已启动计时器,等待特定条件为真。若条件为真,那个么我停止定时器,不希望超时信号发出或执行连接的插槽。但如果条件在指定时间内为false,则可以发出信号timeout()。但无论如何,它总是发出超时信号。我也使用了blockSignals(true),但它不起作用。谁能给我提个建议吗 void timerStart( QTimer* timer, int timeMillisecond ) { timer = new QTimer( this ); timer->setInterv

我已启动计时器,等待特定条件为真。若条件为真,那个么我停止定时器,不希望超时信号发出或执行连接的插槽。但如果条件在指定时间内为false,则可以发出信号timeout()。但无论如何,它总是发出超时信号。我也使用了blockSignals(true),但它不起作用。谁能给我提个建议吗

void timerStart( QTimer* timer, int timeMillisecond )
{
  timer = new QTimer( this );
  timer->setInterval( timeMillisecond );
  timer->setSingleShot( true );
  connect( timer, SIGNAL( timeout() ), this, SLOT( noRespFrmServer( ) ) ) ;
  //timer->start( timeMillisecond );
  timer->start();
}
void timerStop( QTimer* timer )
{
  connect( timer, SIGNAL( destroyed( timer ) ), this, SLOT( stopTimerbeforeTimeout( ) ) );
  qDebug() << " we are in timer stop";
  if( timer )
    {
      timer->stop();
      timer->blockSignals( true );
      delete timer;
    }
}
void timerStart( QTimer* timer, int timeMillisecond )
{
  timer = new QTimer( this );
  timer->setInterval( timeMillisecond );
  timer->setSingleShot( true );
  connect( timer, SIGNAL( timeout() ), this, SLOT( noRespFrmServer( ) ) ) ;
  //timer->start( timeMillisecond );
  timer->start();
}
void timerStart(QTimer*timer,int time毫秒)
{
计时器=新的QTimer(此);
定时器->设置间隔(时间毫秒);
定时器->设置单脉冲(真);
连接(计时器、信号(timeout())、此、插槽(noRespFrmServer());
//定时器->启动(时间毫秒);
定时器->启动();
}
无效计时器停止(QTimer*计时器)
{
连接(计时器、信号(已销毁(计时器))、此、插槽(StopTimerBeforTimeout());
qDebug()停止();
定时器->块信号(真);
删除定时器;
}
}
同样在timerStop函数中,我试图发出被破坏的信号,但得到的响应是它无法连接。 请告诉我

void timerStart( QTimer* timer, int timeMillisecond )
{
  timer = new QTimer( this );
  timer->setInterval( timeMillisecond );
  timer->setSingleShot( true );
  connect( timer, SIGNAL( timeout() ), this, SLOT( noRespFrmServer( ) ) ) ;
  //timer->start( timeMillisecond );
  timer->start();
}
void timerStop( QTimer* timer )
{
  connect( timer, SIGNAL( destroyed( timer ) ), this, SLOT( stopTimerbeforeTimeout( ) ) );
  qDebug() << " we are in timer stop";
  if( timer )
    {
      timer->stop();
      timer->blockSignals( true );
      delete timer;
    }
}
void timerStart( QTimer* timer, int timeMillisecond )
{
  timer = new QTimer( this );
  timer->setInterval( timeMillisecond );
  timer->setSingleShot( true );
  connect( timer, SIGNAL( timeout() ), this, SLOT( noRespFrmServer( ) ) ) ;
  //timer->start( timeMillisecond );
  timer->start();
}
这实际上不会返回您刚刚创建的计时器。你想要的是:

QTimer *timerStart(int timeMillisecond )
{
  QTimer* timer = new QTimer( this );
  timer->setInterval( timeMillisecond );
  timer->setSingleShot( true );
  connect( timer, SIGNAL( timeout() ), this, SLOT( noRespFrmServer( ) ) ) ;
  //timer->start( timeMillisecond );
  timer->start();
  return timer;
}
然后,您可以将返回的计时器传递到stop函数中,尽管我建议您稍后使用Delete,而不是直接删除它:

void timerStop( QTimer* timer )
{
  qDebug() << " we are in timer stop";
  if( timer )
    {
      qDebug() << " we are stopping the timer";
      timer->stop();
      timer->blockSignals( true );
      timer->deleteLater();
    }
}
void timerStop(QTimer*timer)
{
qDebug()块信号(真);
timer->deleteLater();
}
}

timerStart()中有两件事情看起来很可疑,您忽略了传递的参数
timer
,并且没有存储新创建的计时器,因此无法停止它。您从哪里获得传递到
timerStop()
的计时器?您是否打算将
QTimer*&
传递给
timerStart()
,或者将计时器存储在成员或(ugh)全局中?非常感谢。但它仍然执行超时。我已经改变了我的代码,但没有乐趣。事实上,在调试时,我注意到它没有执行“我们正在停止计时器”。我只是在调查原因。确保你确实存储并传递了从
timerStart
返回的计时器。谢谢,伙计,我做了一些傻事。它很好用。谢谢。