Spec-Zone.ru › Qt 5.6

Класс QTimer

Класс QTimer предоставляет таймеры с повтором и однократного срабатывания. Подробнее...

Заголовок: #include <QTimer>
qmake: QT += core
Наследует: QObject
  • Список всех членов, включая унаследованные

Свойства

  • active : const bool
  • interval : int
  • remainingTime : const int
  • singleShot : bool
  • timerType : Qt::TimerType
  • 1 свойство унаследовано от QObject

Открытые функции

QTimer(QObject *parent = Q_NULLPTR)
~QTimer()
int interval() const
bool isActive() const
bool isSingleShot() const
int remainingTime() const
void setInterval(int msec)
void setSingleShot(bool singleShot)
void setTimerType(Qt::TimerType atype)
int timerId() const
Qt::TimerType timerType() const
  • 31 открытая функция унаследована от QObject

Открытые слоты

void start(int msec)
void start()
void stop()
  • 1 открытый слот унаследован от QObject

Сигналы

void timeout()
  • 2 сигнала унаследованы от QObject

Статические открытые члены

void singleShot(int msec, const QObject *receiver, const char *member)
void singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, const char *member)
void singleShot(int msec, const QObject *receiver, PointerToMemberFunction method)
void singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, PointerToMemberFunction method)
void singleShot(int msec, Functor functor)
void singleShot(int msec, Qt::TimerType timerType, Functor functor)
void singleShot(int msec, const QObject *context, Functor functor)
void singleShot(int msec, Qt::TimerType timerType, const QObject *context, Functor functor)
  • 11 статических открытых членов унаследованы от QObject

Переопределенные защищенные функции

virtual void timerEvent(QTimerEvent *e)
  • 9 защищенных функций унаследованы от QObject

Подробное описание

Класс QTimer предоставляет таймеры с повтором и однократного срабатывания.

Класс QTimer предоставляет интерфейс высокого уровня для таймеров. Для его использования создайте QTimer, подключите его сигнал timeout() к соответствующим слотам и вызовите start(). После этого он будет излучать сигнал timeout() через заданные интервалы.

Пример таймера на одну секунду (1000 миллисекунд) (из примера Аналоговых часов):

    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(1000);

После этого слот update() вызывается каждую секунду.

Вы можете настроить таймер на однократное срабатывание, вызвав setSingleShot(true). Также можно использовать статическую функцию QTimer::singleShot() для вызова слота после заданного интервала:

    QTimer::singleShot(200, this, SLOT(updateCaption()));

В многопоточных приложениях вы можете использовать QTimer в любом потоке, имеющем цикл обработки событий. Чтобы запустить цикл обработки событий из потока, не являющегося потоком графического интерфейса, используйте QThread::exec(). Qt использует сродство потоков таймера, чтобы определить, какой поток будет излучать сигнал timeout(). По этой причине вы должны запускать и останавливать таймер в его потоке; запуск таймера из другого потока невозможен.

В качестве специального случая QTimer с интервалом таймаута 0 сработает сразу же после того, как все события в очереди событий системы окон будут обработаны. Это можно использовать для выполнения ресурсоёмкой работы, сохраняя при этом отзывчивость пользовательского интерфейса:

    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(processOneThing()));
    timer->start();

После этого processOneThing() будет вызываться повторно. Он должен быть написан таким образом, чтобы всегда возвращаться быстро (обычно после обработки одного элемента данных), чтобы Qt мог передавать события в пользовательский интерфейс и останавливать таймер, как только он завершит всю свою работу. Это традиционный способ реализации ресурсоёмкой работы в приложениях с графическим интерфейсом, но поскольку в настоящее время многопоточность становится доступной на всё большем количестве платформ, ожидается, что объекты QTimer с нулевыми миллисекундами таймаута постепенно будут заменены на QThreads.

Точность и разрешение таймера

Точность таймеров зависит от операционной системы и аппаратного обеспечения. Большинство платформ поддерживают разрешение 1 миллисекунда, хотя точность таймера не всегда соответствует этому разрешению в реальных условиях.

Точность также зависит от типа таймера. Для Qt::PreciseTimer QTimer будет пытаться сохранить точность 1 миллисекунда. Точные таймеры также никогда не сработают раньше ожидаемого времени.

Для типов Qt::CoarseTimer и Qt::VeryCoarseTimer QTimer может сработать раньше ожидаемого времени, в пределах допустимых отклонений для этих типов: 5% от интервала для Qt::CoarseTimer и 500 мс для Qt::VeryCoarseTimer.

Все типы таймеров могут сработать позже ожидаемого времени, если система загружена или не может обеспечить требуемую точность. В этом случае переполнения таймаута Qt вызовет activated() только один раз, даже если истекло несколько таймаутов, а затем возобновит исходный интервал.

Альтернативы QTimer

Альтернативой использованию QTimer является вызов QObject::startTimer() для вашего объекта и переопределение обработчика события QObject::timerEvent() в вашем классе (который должен наследовать QObject). Недостатком является то, что timerEvent() не поддерживает такие высокоуровневые функции, как однократные таймеры или сигналы.

Другой вариант — QBasicTimer. Обычно он менее сложен, чем прямое использование QObject::startTimer(). Смотрите Таймеры для обзора всех трёх подходов.

Некоторые операционные системы ограничивают количество используемых таймеров; Qt пытается обойти эти ограничения.

END_OF_DOCUMENT_MARKER

См. также QBasicTimer, QTimerEvent, QObject::timerEvent(), Таймеры, Пример аналоговых часов и Пример волнистой линии.

Документация свойств

active : const bool

Это булево свойство равно true если таймер запущен, иначе равно false.

Это свойство было добавлено в Qt 4.3.

Функции доступа:

bool isActive() const

interval : int

Это свойство содержит интервал таймаута в миллисекундах

Значение по умолчанию для этого свойства равно 0. Таймер QTimer с интервалом таймаута 0 сработает, как только все события в очереди событий системы окон будут обработаны.

Изменение интервала активного таймера меняет его timerId.

Функции доступа:

int interval() const
void setInterval(int msec)

См. также singleShot.

remainingTime : const int

Это свойство содержит оставшееся время в миллисекундах

Возвращает оставшееся время таймера в миллисекундах до таймаута. Если таймер неактивен, возвращаемое значение будет -1. Если таймер просрочен, возвращаемое значение будет 0.

Это свойство было добавлено в Qt 5.0.

Функции доступа:

int remainingTime() const

См. также interval.

singleShot : bool

Это свойство определяет, является ли таймер одноразовым

Одноразовый таймер срабатывает только один раз, не-одноразовые таймеры срабатывают каждые interval миллисекунд.

Значение по умолчанию для этого свойства равно false.

Функции доступа:

bool isSingleShot() const
void setSingleShot(bool singleShot)

См. также interval и singleShot().

timerType : Qt::TimerType

управляет точностью таймера

Значение по умолчанию для этого свойства равно Qt::CoarseTimer.

Функции доступа:

Qt::TimerType timerType() const
void setTimerType(Qt::TimerType atype)

См. также Qt::TimerType.

Документация по функциям-членам

QTimer::QTimer(QObject *parent = Q_NULLPTR)

Создает таймер с заданным parent.

QTimer::~QTimer()

Удаляет таймер.

bool QTimer::isActive() const

Возвращает true если таймер запущен (ожидает); в противном случае возвращает false.

Примечание: Функция-получатель для свойства active.

[static] void QTimer::singleShot(int msec, const QObject *receiver, const char *member)

Эта статическая функция вызывает слот после заданного интервала времени.

Использование этой функции очень удобно, потому что вам не нужно беспокоиться о timerEvent или создавать локальный объект QTimer.

Пример:

#include <QApplication>
#include <QTimer>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTimer::singleShot(600000, &app, SLOT(quit()));
    ...
    return app.exec();
}

Эта программа автоматически завершается через 10 минут (600 000 миллисекунд).

receiver – объект-получатель, member – имя слота. Интервал времени – msec миллисекунд.

Примечание: Эта функция реентерабельна.

См. также setSingleShot() и start().

[static] void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, const char *member)

Это перегруженная функция.

Эта статическая функция вызывает слот после заданного интервала времени.

Использование этой функции очень удобно, потому что вам не нужно беспокоиться о timerEvent или создавать локальный объект QTimer.

receiver – объект-получатель, member – имя слота. Интервал времени – msec миллисекунд. timerType влияет на точность таймера.

Примечание: Эта функция реентерабельна.

См. также start().

[static] void QTimer::singleShot(int msec, const QObject *receiver, PointerToMemberFunction method)

Это перегруженная функция.

Эта статическая функция вызывает член-функцию объекта QObject после заданного интервала времени.

Использование этой функции очень удобно, потому что вам не нужно беспокоиться о timerEvent или создавать локальный объект QTimer.

receiver – объект-получатель, method – имя член-функции. Интервал времени – msec миллисекунд.

Если receiver будет уничтожен до истечения интервала, метод не будет вызван. Функция будет запущена в потоке receiver. Поток получателя должен иметь работающий цикл событий Qt.

Примечание: Эта функция реентерабельна.

Эта функция была добавлена в Qt 5.4.

См. также start().

[static] void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, PointerToMemberFunction method)

Это перегруженная функция.

Эта статическая функция вызывает член-функцию объекта QObject после заданного интервала времени.

Использование этой функции очень удобно, потому что вам не нужно беспокоиться о timerEvent или создавать локальный объект QTimer.

receiver – объект-получатель, method – имя член-функции. Интервал времени – msec миллисекунд. timerType влияет на точность таймера.

Если receiver будет уничтожен до истечения интервала, метод не будет вызван. Функция будет запущена в потоке receiver. Поток получателя должен иметь работающий цикл событий Qt.

Примечание: Эта функция реентерабельна.

Эта функция была добавлена в Qt 5.4.

См. также start().

[static] void QTimer::singleShot(int msec, Functor functor)

Это перегруженная функция.

Эта статическая функция вызывает functor после заданного интервала времени.

Использование этой функции очень удобно, потому что вам не нужно беспокоиться о timerEvent или создавать локальный объект QTimer.

Интервал времени – msec миллисекунд.

Примечание: Эта функция реентерабельна.

Эта функция была добавлена в Qt 5.4.

См. также start().

[static] void QTimer::singleShot(int msec, Qt::TimerType timerType, Functor functor)

Это перегруженная функция.

Эта статическая функция вызывает functor после заданного интервала времени.

Использование этой функции очень удобно, потому что вам не нужно беспокоиться о timerEvent или создавать локальный объект QTimer.

Интервал времени – msec миллисекунд. timerType влияет на точность таймера.

Примечание: Эта функция реентерабельна.

Эта функция была добавлена в Qt 5.4.

См. также start().

[static] void QTimer::singleShot(int msec, const QObject *context, Functor functor)

Это перегруженная функция.

Эта статическая функция вызывает functor после заданного интервала времени.

Использование этой функции очень удобно, потому что вам не нужно беспокоиться о timerEvent или создавать локальный объект QTimer object.

Интервал времени составляет msec миллисекунд.

Если context будет уничтожен до истечения интервала, метод не будет вызван. Функция будет выполнена в потоке context. Поток контекста должен иметь работающий цикл событий Qt.

Примечание: Эта функция является реентерабельной.

Данная функция была представлена в Qt 5.4.

См. также start().

[static] void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *context, Functor functor)

Это перегруженная функция.

Эта статическая функция вызывает functor после заданного интервала времени.

Использование этой функции очень удобно, так как вам не нужно беспокоиться о timerEvent или создавать локальный объект QTimer.

Интервал времени составляет msec миллисекунд. timerType влияет на точность таймера.

Если context будет уничтожен до истечения интервала, метод не будет вызван. Функция будет выполнена в потоке context. Поток контекста должен иметь работающий цикл событий Qt.

Примечание: Эта функция является реентерабельной.

Данная функция была представлена в Qt 5.4.

См. также start().

[slot] void QTimer::start(int msec)

Запускает или перезапускает таймер с интервалом таймаута msec миллисекунд.

Если таймер уже запущен, он будет остановлен и перезапущен.

Если singleShot имеет значение true, таймер будет активирован только один раз.

[slot] void QTimer::start()

Эта функция перегружает start().

Запускает или перезапускает таймер с таймаутом, указанным в interval.

Если таймер уже запущен, он будет остановлен и перезапущен.

Если singleShot имеет значение true, таймер будет активирован только один раз.

[slot] void QTimer::stop()

Останавливает таймер.

См. также start().

[signal] void QTimer::timeout()

Этот сигнал генерируется при истечении таймаута.

Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может генерироваться пользователем.

См. также interval, start() и stop().

[virtual protected] void QTimer::timerEvent(QTimerEvent *e)

Переопределено из QObject::timerEvent().

int QTimer::timerId() const

Возвращает идентификатор таймера, если таймер запущен, иначе возвращает -1.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qtimer.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API