Шаг 118.
Библиотека Qt.
Класс QTimerEvent

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




Предыдущий шаг Содержание Следующий шаг