QTimer запускается в определенное время - PullRequest
8 голосов
/ 01 марта 2011

Я пытаюсь запустить таймер в определенное время, например 02:30.Каждый день начинается в 02.30.

Возможно ли это?Есть ли у вас какие-либо идеи?

Большое спасибо.

Ответы [ 3 ]

9 голосов
/ 01 марта 2011

QTimer не обрабатывает определенное время дня изначально, но вы можете использовать его вместе с QDateTime, чтобы получить то, что вы хотите.То есть используйте объекты QDateTime, чтобы выяснить, сколько секунд находится между (прямо сейчас) и 2:30 (здесь QDateTime :: msecsTo () выглядит особенно уместно), а затем настройте QTimer на отключение через столько секунд.Повторите при необходимости.

6 голосов
/ 01 марта 2011

В зависимости от требуемого разрешения, вы можете использовать обычный QTimer, который запускается, скажем, каждую минуту.
В timerEvent вы можете проверить, подходящее ли время (используя QDateTime), и вызвать необходимое событие.

1 голос
/ 23 августа 2013

Решение Jeremy действительно элегантно, но оно не учитывает переход на летнее время. Чтобы защититься от этого, вы должны запускать событие таймера каждый час и проверять настенные часы. Вычислите дельту цели, как предлагает Джереми, и, если она падает в течение ближайшего часа, установите таймер на срабатывание и отключите почасовой таймер.
Если нет, просто подождите, пока почасовой таймер снова сработает.

Pseudo code:

Get wall clock time
Calculate difference between target time and wall clock
If difference < 1 hour:
    Set timer to fire after difference secs
    If this is a repeating event, restart the hourly timer
Else:
    Start watch timer to do this calculation again after one hour
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...