Spec-Zone.ru › Qt 5.9

Класс 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 = Q_NULLPTR)
~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)
  • 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 будет излучать activated() только один раз, даже если истекло несколько таймаутов, а затем возобновит исходный интервал.

Альтернативы 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 = Q_NULLPTR)

Создает таймер с заданным parent.

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

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

[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. Поток контекста должен иметь работающий цикл событий 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. Поток контекста должен иметь работающий цикл событий 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().

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

Spec-Zone.ru

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