Spec-Zone.ru › Qt

Класс QTimer

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

Заголовок: #include <QTimer>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Наследует: QObject
  • Список всех членов, включая унаследованные

Свойства

  • active : 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 = Qt::AutoConnection)
QMetaObject::Connection callOnTimeout(const QObject *context, Functor slot, Qt::ConnectionType connectionType = Qt::AutoConnection)
QMetaObject::Connection callOnTimeout(const QObject *receiver, MemberFunction *slot, Qt::ConnectionType connectionType = Qt::AutoConnection)
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, &Foo::updateCaption);

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

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

    QTimer *timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &Foo::processOneThing);
    timer->start();

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

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

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

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

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

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

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

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

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

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

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

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

[bindable read-only] active : bool

Примечание: Это свойство поддерживает QProperty привязки.

Это логическое свойство равно true если таймер работает, иначе false.

[bindable] interval : int

Примечание: Это свойство поддерживает QProperty привязки.

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

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

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

См. также singleShot.

[read-only, since 5.0] remainingTime : const int

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

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

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

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

int remainingTime() const

См. также interval.

[bindable] singleShot : bool

Примечание: Это свойство поддерживает QProperty привязки.

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

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

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

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

[bindable] timerType : Qt::TimerType

Примечание: Это свойство поддерживает QProperty привязки.

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

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

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

[private signal] void QTimer::timeout()

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

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

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

[virtual] QTimer::~QTimer()

Уничтожает таймер.

[since 5.12] template <typename Functor> QMetaObject::Connection QTimer::callOnTimeout(Functor slot, Qt::ConnectionType connectionType = Qt::AutoConnection)

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

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

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

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

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

[since 5.12] template <typename Functor> QMetaObject::Connection QTimer::callOnTimeout(const QObject *context, Functor slot, Qt::ConnectionType connectionType = Qt::AutoConnection)

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

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

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

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

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

[since 5.12] template <typename MemberFunction> QMetaObject::Connection QTimer::callOnTimeout(const QObject *receiver, MemberFunction *slot, Qt::ConnectionType connectionType = Qt::AutoConnection)

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

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

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

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

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

[since 5.8] std::chrono::milliseconds QTimer::intervalAsDuration() const

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

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

См. также interval.

bool QTimer::isActive() const

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

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

[since 5.8] 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, since 5.4] template <typename PointerToMemberFunction> 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, since 5.4] template <typename PointerToMemberFunction> 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, since 5.4] template <typename Functor> void QTimer::singleShot(int msec, Functor functor)

Это перегруженный метод.

Этот статический метод вызывает functor через заданный интервал времени.

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

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

Примечание: Этот метод является реентерабельным.

Этот метод был представлен в Qt 5.4.

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

[static, since 5.4] template <typename Functor> void QTimer::singleShot(int msec, Qt::TimerType timerType, Functor functor)

Это перегруженный метод.

Этот статический метод вызывает functor через заданный интервал времени.

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

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

Примечание: Этот метод является реентерабельным.

Этот метод был представлен в Qt 5.4.

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

[static, since 5.4] template <typename Functor, int> void QTimer::singleShot(int msec, const QObject *context, Functor functor)

Это перегруженный метод.

Этот статический метод вызывает functor через заданный интервал времени.

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

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

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

Примечание: Этот метод является реентерабельным.

Этот метод был представлен в Qt 5.4.

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

[static, since 5.4] template <typename Functor, int> 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, since 5.8] void QTimer::singleShot(std::chrono::milliseconds msec, const QObject *receiver, const char *member)

Это перегруженный метод.

Этот статический метод вызывает слот через заданный интервал времени.

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

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

Примечание: Этот метод является реентерабельным.

Этот метод был представлен в Qt 5.8.

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

[static, since 5.8] 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().

[since 5.8] 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-6.2/qtimer.html

Spec-Zone.ru

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