Spec-Zone.ru › Qt 6.1

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

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

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

[bindable read-only] active : bool

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

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

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.

[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 миллисекунд).

Получатель — это объект-получатель, а член — это слот. Интервал времени — мс миллисекунд.

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

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

[static] void QTimer::singleShot(int мс, Qt::TimerType типТаймера, const QObject *получатель, const char *член)

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

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

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

Получатель — это объект-получатель, а член — это слот. Интервал времени — мс миллисекунд. ТипТаймера влияет на точность таймера.

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

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

[static, since 5.4] template <typename PointerToMemberFunction> void QTimer::singleShot(int мс, const QObject *получатель, PointerToMemberFunction метод)

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

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

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

Получатель — это объект-получатель, а метод — это член-функция. Интервал времени — мс миллисекунд.

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

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

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

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

[static, since 5.4] template <typename PointerToMemberFunction> void QTimer::singleShot(int мс, Qt::TimerType типТаймера, const QObject *получатель, PointerToMemberFunction метод)

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

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

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

Получатель — это объект-получатель, а метод — это член-функция. Интервал времени — мс миллисекунд. ТипТаймера влияет на точность таймера.

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

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

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

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

[static, since 5.4] template <typename Functor> void QTimer::singleShot(int мс, Functor функтор)

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

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

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

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

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

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

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

[static, since 5.4] template <typename Functor> void QTimer::singleShot(int мс, Qt::TimerType типТаймера, Functor функтор)

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

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

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

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

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

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

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

[static, since 5.4] template <typename Functor, int> void QTimer::singleShot(int мс, const QObject *контекст, Functor функтор)

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

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

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

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

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

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

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

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

[static, since 5.4] template <typename Functor, int> void QTimer::singleShot(int мс, Qt::TimerType типТаймера, const QObject *контекст, Functor функтор)

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

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

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

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

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

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

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

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

[static, since 5.8] void QTimer::singleShot(std::chrono::milliseconds мс, const QObject *получатель, const char *член)

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

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

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

Получатель — это объект-получатель, а член — это слот. Интервал времени задаётся в объекте duration мс.

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

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

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

[static, since 5.8] void QTimer::singleShot(std::chrono::milliseconds мс, Qt::TimerType типТаймера, const QObject *получатель, const char *член)

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

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

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

Получатель — это объект-получатель, а член — это слот. Интервал времени задаётся в объекте duration мс. ТипТаймера влияет на точность таймера.

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

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

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

[since 5.8] void QTimer::start(std::chrono::milliseconds мс)

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

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

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

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

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

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

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

int QTimer::timerId() const

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

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

Spec-Zone.ru

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