Spec-Zone.ru › Qt 5.11

Класс QTimer

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

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

Свойства

  • active : const bool
  • interval : int
  • remainingTime : const int
  • singleShot : bool
  • timerType : Qt::TimerType
  • 1 свойство унаследовано от QObject

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

QTimer(QObject *parent = nullptr)
virtual ~QTimer()
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
  • 32 открытые функции унаследованы от QObject

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

void start(int msec)
void start()
void stop()
  • 1 открытый слот унаследован от QObject

Сигналы

void timeout()
  • 2 сигнала унаследованы от QObject

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

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)
  • 11 статических открытых членов унаследованы от QObject

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

virtual void timerEvent(QTimerEvent *e) override
  • 9 защищённых функций унаследованы от QObject

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

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

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

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

    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(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.

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

[virtual] QTimer::~QTimer()

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

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

Примечание: Эта функция повторно входима.

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

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

END_OF_DOCUMENT_MARKER

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

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

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

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

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

[slot] void QTimer::start()

Этот метод перегружает start().

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

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

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

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

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

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

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

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

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

[slot] void QTimer::stop()

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

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

[signal] void QTimer::timeout()

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

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

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

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

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

int QTimer::timerId() const

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

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

Spec-Zone.ru

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