Spec-Zone.ru › Qt 5.13

Класс QTimer

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

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

Свойства

  • active : const bool
  • interval : int
  • remainingTime : const int
  • singleShot : bool
  • timerType : Qt::TimerType

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

QTimer(QObject *parent = nullptr)
virtual ~QTimer()
QMetaObject::Connection callOnTimeout(Functor slot, Qt::ConnectionType connectionType = ...)
QMetaObject::Connection callOnTimeout(const QObject *context, Functor slot, Qt::ConnectionType connectionType = ...)
QMetaObject::Connection callOnTimeout(const QObject *receiver, MemberFunction *slot, Qt::ConnectionType connectionType = ...)
int interval() const
std::chrono::milliseconds intervalAsDuration() const
bool isActive() const
bool isSingleShot() const
int remainingTime() const
std::chrono::milliseconds remainingTimeAsDuration() const
void setInterval(int msec)
void setInterval(std::chrono::milliseconds value)
void setSingleShot(bool singleShot)
void setTimerType(Qt::TimerType atype)
void start(std::chrono::milliseconds msec)
int timerId() const
Qt::TimerType timerType() const

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

void start()
void start(int msec)
void stop()

Сигналы

void timeout()

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

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)
void singleShot(std::chrono::milliseconds msec, const QObject *receiver, const char *member)
void singleShot(std::chrono::milliseconds msec, Qt::TimerType timerType, const QObject *receiver, const char *member)

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

virtual void timerEvent(QTimerEvent *e) override

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

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

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

    QTimer *timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, QOverload<>::of(&AnalogClock::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 с нулевыми миллисекундами постепенно будут заменены объектами QThread.

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

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

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

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

END_OF_DOCUMENT_MARKER

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

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

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

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

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

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

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

active : const bool

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

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

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

bool isActive() const

interval : int

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

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

Установка интервала активного таймера изменяет его timerId().

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

int interval() const
void setInterval(int msec)
void setInterval(std::chrono::milliseconds value)

См. также 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 = nullptr)

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

[slot] void QTimer::start()

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

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

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

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

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

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

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

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

[slot] void QTimer::stop()

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

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

[signal] void QTimer::timeout()

Этот сигнал излучается, когда таймер завершает работу.

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

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

[virtual] QTimer::~QTimer()

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

QMetaObject::Connection QTimer::callOnTimeout(Functor slot, Qt::ConnectionType connectionType = ...)

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

Создаёт подключение от сигнала timeout() к slot и возвращает дескриптор подключения.

Этот метод предоставлен для удобства. Он эквивалентен вызову QObject::connect(timer, &QTimer::timeout, timer, slot, connectionType).

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

См. также QObject::connect() и timeout().

QMetaObject::Connection QTimer::callOnTimeout(const QObject *context, Functor slot, Qt::ConnectionType connectionType = ...)

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

Создаёт подключение от сигнала timeout() к slot, размещая его в определённой очереди событий context, и возвращает дескриптор подключения.

Этот метод предоставлен для удобства. Он эквивалентен вызову QObject::connect(timer, &QTimer::timeout, context, slot, connectionType).

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

См. также QObject::connect() и timeout().

QMetaObject::Connection QTimer::callOnTimeout(const QObject *receiver, MemberFunction *slot, Qt::ConnectionType connectionType = ...)

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

Создаёт подключение от сигнала timeout() к slot в объекте receiver. Возвращает дескриптор подключения.

Этот метод предоставлен для удобства. Он эквивалентен вызову QObject::connect(timer, &QTimer::timeout, receiver, slot, connectionType).

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

См. также QObject::connect() и timeout().

std::chrono::milliseconds QTimer::intervalAsDuration() const

Возвращает интервал этого таймера как объект std::chrono::milliseconds.

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

См. также interval.

bool QTimer::isActive() const

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

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

std::chrono::milliseconds QTimer::remainingTimeAsDuration() const

Возвращает оставшееся время в этом объекте таймера как объект std::chrono::milliseconds. Если таймер истек или просрочен, возвращаемое значение равно std::chrono::milliseconds::zero(). Если оставшееся время не может быть найдено или таймер неактивен, эта функция возвращает отрицательную продолжительность.

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

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

[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. Поток 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. Поток 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.

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

Если context будет удалён до истечения интервала, метод не будет вызван. Функция будет выполняться в потоке 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. Поток context должен иметь работающий цикл событий Qt.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

void QTimer::start(std::chrono::milliseconds msec)

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

Запускает или перезапускает таймер с тайм-аутом продолжительностью msec миллисекунд.

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

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

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

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

Переопределяет: QObject::timerEvent(QTimerEvent *event).

int QTimer::timerId() const

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

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

Spec-Zone.ru

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