2015-03-30 2 views
0

Я использовал таймер несколько раз, используя сигналы и слоты, я запускаю его и продолжаю и вызывает событие каждые несколько секунд.Как использовать таймер для заданного периода времени

QTimer * timer = new QTimer(); 
connect(timer,SIGNAL(timeout()),this,SLOT(move())); 
timer->start(50); 

Я хотел бы знать, как идти об использовании таймера в течение определенного периода времени, например

Если что-то происходит в моей программе - нет>

//Start CountdownTimer(3 seconds) 
setImage("3secondImage.jpg"); 
//when time allocated is up 
resetOrginalImage("orig.jpg"); 

У меня нет понятия, как чтобы сделать это, любая помощь или точка в правильном направлении были бы высоко оценены.

ответ

3

QTimer имеет singleShot(). Но вам нужно создать отдельный слот без аргументов:

private slots: 
    void resetImage() {resetOrginalImage("orig.jpg");} 

... 
setImage("3secondImage.jpg"); 
QTimer::singleShot(3000, this, SLOT(resetImage())); 
+0

Я только хочу, чтобы его однажды назовем? @svlasov –

+0

Он будет называться один раз. _ Одноразовый таймер срабатывает только один раз, таймеры с одним выстрелом срабатывают каждый интервал milliseconds._ – svlasov

+0

Спасибо, что он работает –

0

Если вы используете C++ 11, использование лямбда-выражений с QTimer делает его легче читать, особенно если таймер выполняет только небольшое количество строки кода: -

QTimer * timer = new QTimer(); 
timer->setSingleShot(true); // only once 

connect(timer, &QTimer::timeout, [=]{ 
    // do work here 
    resetOrginalImage("orig.jpg"); 
}; 

timer->start(3 * 1000); // start in 3 seconds 

на мой взгляд, это немного более элегантно, чем того, чтобы объявить отдельную функцию, которая будет вызвана, когда время таймера вне.

Смежные вопросы