На этом шаге рассмотрим событие таймера - класс 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.