Событие таймера QTimerEvent


Каждый класс, унаследованный от QObject, содержит свои собственные встроенные таймеры. Вызов метода QObject::startTimer() производит запуск таймера. В качестве параметра ему передается интервал запуска в миллисекундах. Метод startTimer() возвращает идентификатор, необходимый для распознавания таймеров, используемых в объекте. По истечении установленного интервала запуска генерируется событие QTimerEvent, которое передается В метод timerEvent(). Вызвав метод QTimerEvent::timerId() объекта события QTimerEvent, можно узнать идентификатор таймера, инициировавшего это событие. Идентификатор можно использовать для уничтожения таймера, передав его в метод QObject::killTimer(). В следующей программе отображается надпись, которая появляется и исчезает через заданные промежутки времени.

{рисунок}


int main (int argc, char** argv)
{
    QApplication app (argc, argv);
    BlinkLabel   lbl("<FONT COLOR = RED><CENTER>Blink</CENTER></FONT>");

    lbl.show();

    return app.exec();
}

В функции main() создается виджет класса BlinkLabel, в конструктор которого первым параметром передается отображаемый текст в формате RichText.


class BlinkLabel : public QLabel {
private:
    bool    m_bBlink;
    QString m_strText;

protected:
    virtual void timerEvent(QTimerEvent*)
    {
        m_bBlink = !m_bBlink;
        setText(m_bBlink ? m_strText : "");
    }

public:
    BlinkLabel(const QString& strText,
                     int      nInterval = 200,
                     QWidget* pwgt      = 0
              )
        : QLabel(strText, pwgt)
        , m_bBlink(true)
        , m_strText(strText)
    {
        startTimer(nInterval);
    }
};

Класс BlinkLabel содержит атрибут булевого типа m_bBlink, управляющий отображением надписи, и атрибут m_strText, содержащий текст надписи. В конструктор класса BlinkLabel передается интервал мигания nInterval. По умолчанию он равен 200 миллисекундам. Вызов метода startTimer() запускает таймер со значением переданного интервала запуска. По истечении этого интервала происходит создание события QTimerEvent, которое передается в метод timerEvent(), в котором происходит смена значения атрибута m_bBlink на противоположное. И в соответствии с установленным значением, методом setText() выполняется одно из действий:

  • false — вся область надписи очищается установкой пустой строки;
  • true — текст надписи устанавливается заново.

Читать далее: Класс QTimer