Spec-Zone.ru › Qt 6.0

Класс QTimer

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

Заголовок: #include <QTimer>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
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 = 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 мог доставлять события в пользовательский интерфейс и останавливать таймер, как только он завершит всю свою работу. Это традиционный способ реализации сложных задач в приложениях с GUI, но, поскольку многопоточность сегодня становится доступной на всё большем количестве платформ, ожидается, что объекты 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(), Таймеры, Пример аналоговых часов и Пример Wiggly.

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

[read-only] active : const bool

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

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

bool isActive() const

interval : int

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

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

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

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

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

См. также singleShot.

[read-only, since 5.0] 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().

[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.0/qtimer.html

Spec-Zone.ru

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