避免 QTimer 发出超时信号
Avoid QTimer to emit timeout signal
我已经启动定时器等待特定条件为真。如果条件为真,那么我停止计时器并且不希望超时信号发出或执行连接的插槽。但是,如果条件在指定时间内为假,则可以发出信号 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;
}
}
同样在 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();
}
这实际上 return 您刚刚创建的计时器。你想要这样的东西:
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;
}
然后你可以将 returned 计时器传递给停止函数,尽管我建议你使用 deleteLater 而不是直接删除它:
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();
}
}
我已经启动定时器等待特定条件为真。如果条件为真,那么我停止计时器并且不希望超时信号发出或执行连接的插槽。但是,如果条件在指定时间内为假,则可以发出信号 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;
}
}
同样在 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();
}
这实际上 return 您刚刚创建的计时器。你想要这样的东西:
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;
}
然后你可以将 returned 计时器传递给停止函数,尽管我建议你使用 deleteLater 而不是直接删除它:
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();
}
}