Я запустил таймер, чтобы дождаться выполнения определенного условия. ЕСЛИ условие истинно, тогда я останавливаю таймер и не хочу, чтобы сигнал тайм-аута испускал или выполнял подключенный слот. Но если условие ложно в течение указанного времени, то можно выдать тайм-аут сигнала(). Но в любом случае он всегда выдает сигнал тайм-аута. Я также использовал 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 я пытался выдать уничтоженный сигнал, но получил ответ, что не удается подключиться. Пожалуйста, посоветуйте мне.
timerStart()
вы игнорируете переданный параметрtimer
и не сохраняете только что созданный таймер, поэтому у вас нет возможности его остановить. Где вы берете таймер, который вы передаетеtimerStop()
? Возможно, вы имели в виду передатьQTimer*&
вtimerStart()
или сохранить таймер в члене или (тьфу) глобально? - person Toby Speight   schedule 27.08.2015