На этом шаге рассмотрим событие таймера - класс QTimerEvent.
Объект класса QTimerEvent содержит информацию о событии, инициированном таймером. Этот объект передается в метод обработки события timerEvent(). Объект события содержит идентификационный номер таймера. Например, для класса, унаследованного от класса QWidget, метод обработки этого события может выглядеть следующим образом:
void MyClass::timerEvent(QTimerEvent* e) { if (event->timerId() == myTimerId) { // Выполнить какие-либо действия } else { QWidget::timerEvent(e); // Передать событие дальше } }
Каждый класс, унаследованный от QObject, содержит свои собственные встроенные таймеры. Вызов метода QObject::startTimer() запускает таймер. В качестве параметра ему передается интервал запуска в миллисекундах. Метод startTimer() возвращает идентификатор, необходимый для распознавания таймеров, используемых в объекте.
По истечении установленного интервала запуска генерируется событие QTimerEvent, которое передается в метод timerEvent(). Вызвав метод QTimerEvent::timerId() объекта события QTimerEvent, можно узнать идентификатор таймера, инициировавшего это событие.
Идентификатор можно использовать для уничтожения таймера, передав его в метод QObject::killTimer(). В программе, окно которой показано на рис. 1, отображается надпись, которая изменяет цвет через заданные промежутки времени.
Рис.1. Изменение цвета надписи
Рассмотрим заголовочный файл, содержащий описание класса:
class ColLabel : public QLabel { private: int col; protected: virtual void timerEvent(QTimerEvent*) { //Проверяется значение переменной col //и выполняется вывод надписи определенным цветом switch (col) { case 0:setText("<FONT COLOR = RED SIZE=14><CENTER> Радуга</CENTER></FONT>");break; case 1:setText("<FONT COLOR = ORANGE SIZE=14><CENTER> Радуга</CENTER></FONT>");break; case 2:setText("<FONT COLOR = YELLOW SIZE=14><CENTER> Радуга</CENTER></FONT>");break; case 3:setText("<FONT COLOR = GREEN SIZE=14><CENTER> Радуга</CENTER></FONT>");break; case 4:setText("<FONT COLOR = CYAN SIZE=14><CENTER> Радуга</CENTER></FONT>");break; case 5:setText("<FONT COLOR = BLUE SIZE=14><CENTER> Радуга</CENTER></FONT>");break; case 6:setText("<FONT COLOR = MAGENTA SIZE=14><CENTER> Радуга</CENTER></FONT>");break; } //каждый раз увеличивается значение переменной col на единицу col++; if(col==7)col=0; } public: //В конструктор класса ColLabel передается интервал смены цвета надписи nInterval //По умолчанию он равен 500 мс ColLabel(const QString& str, int nInterval = 500, QWidget* pwgt = 0 ) : QLabel(str, pwgt) , col(0) { //Вызов метода startTimer() запускает таймер со значением переданного //интервала запуска. По истечении этого интервала создается событие QTimerEvent, //которое передается в метод timerEvent() startTimer(nInterval); } };
Файлы приложения можно взять здесь.
На следующем шаге рассмотрим класс QTimer.