Spec-Zone.ru › Qt 5.14

Класс 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 = ...)
QMetaObject::Connection callOnTimeout(const QObject *context, Functor slot, Qt::ConnectionType connectionType = ...)
QMetaObject::Connection callOnTimeout(const QObject *receiver, MemberFunction *slot, Qt::ConnectionType connectionType = ...)
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, 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() не поддерживает такие высокоуровневые функции, как таймеры single-shot или сигналы.

Ещё одной альтернативой является 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

Это свойство указывает, является ли таймер таймером single-shot

Таймер single-shot срабатывает только один раз, не single-shot таймеры срабатывают каждые 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()

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

QMetaObject::Connection QTimer::callOnTimeout(Functor slot, Qt::ConnectionType connectionType = ...)

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

Создаёт соединение типа connectionType от сигнала timeout() к slot и возвращает дескриптор соединения.

Этот метод предоставлен для удобства. Он эквивалентен вызову QObject::connect(timer, &QTimer::timeout, timer, slot, connectionType).

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

См. также QObject::connect() и timeout().

QMetaObject::Connection QTimer::callOnTimeout(const QObject *context, Functor slot, Qt::ConnectionType connectionType = ...)

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

Создаёт соединение от сигнала timeout() к slot, который будет размещён в конкретной очереди событий context, и возвращает дескриптор соединения.

Этот метод предоставлен для удобства. Он эквивалентен вызову QObject::connect(timer, &QTimer::timeout, context, slot, connectionType).

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

См. также QObject::connect() и timeout().

QMetaObject::Connection QTimer::callOnTimeout(const QObject *receiver, MemberFunction *slot, Qt::ConnectionType connectionType = ...)

Эта функция перегружает 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] 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] 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] 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().

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

Spec-Zone.ru

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