2013-07-22 3 views

ответ

1

Вы можете наследовать от QDialog и использовать два события QTimer. Первый набор запускается через 20 секунд, а затем закрывает диалог, а второй запускает каждую секунду и обновляет QLabel с оставшимся временем. Таким образом, при отображении QDialog вы могли бы сделать что-то вроде этого: -

m_DialogClose = startTimer(20 * 1000); // 20 seconds 
m_RemainingTime = startTimer(1 * 1000); // 1 second 

Затем переопределить функцию TimerEvent в вашем диалоге: -

void MyDialog::timerEvent(QTimerEvent *event) 
{ 
    if(event->timerId() == m_DialogClose) 
    { 
     // close the dialog 
    } 

    else if(event->timerId() == m_RemainingTime) 
    { 
     // update the relevant QLabel text 
    } 
} 
+1

+1 Но один QTimer с stSingleShot (ложь) , интервал 1 сек и счетчик будет – Trompa

+0

@Trompa, да, это еще один возможный метод, хотя QDialog уже включает в себя функции таймера, которые я использую, поэтому вам не нужно обрабатывать соединение сигнала и слотов QTimer. Либо это сработает. Кроме того, хотя в этом случае это не имеет значения, я обнаружил, что много объектов QTimer вызывает проблемы, поэтому, когда это не требуется, я пытаюсь использовать встроенные таймеры объектов. – TheDarkKnight

+0

Yup, просто давая идеи;) – Trompa