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