Spec-Zone.ru › Qt 5.15

Класс 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 = 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 в любом потоке, имеющем цикл обработки событий. Чтобы запустить цикл обработки событий из потока, не являющегося GUI-потоком, используйте 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 миллисекунда, хотя точность таймера не будет соответствовать этому разрешению во многих реальных ситуациях.

Точность также зависит от типа таймера timer type. Для 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.

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

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()

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

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().

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().

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().

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[static] 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] 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] 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.15/qtimer.html

Spec-Zone.ru

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